/* 분리된 CSS */

/* === style block 1 === */

        /* 본문에 바로 쓰이는 글꼴만 여기서 받는다.
           나머지 장식 글꼴 12종은 첫 화면을 그린 뒤에 뒤에서 받는다
           (@import 는 CSS 파싱을 막아, 예전엔 이것 때문에 시작이 느렸다) */
        /* 프리텐다드는 기존 노트와 글꼴 메뉴를 위해 계속 불러온다. */
        @import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css');
        /* 옛 노트에 인라인으로 박혀 있는 'Noto Sans KR' 지정이 흐트러지지 않게
           같은 글꼴(프리텐다드)을 가리키는 별칭만 남긴다 (설치 안 됐으면 다음 폴백 폰트로). */
        @font-face{font-family:'Noto Sans KR';src:local('Pretendard Variable'),local('Pretendard');}

/* 기본 UI·새 노트 글꼴. OFL 라이선스와 함께 직접 제공해 CDN 없이도 쓴다. */
@font-face{font-family:'Jua';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/jua-regular.woff2') format('woff2');}

/* PDF typography — bundled, SIL OFL fonts, independent of OS/CDN fonts.
   Normalized line metrics anchor the PDF baseline before the fitting pass. */
@font-face{font-family:'SDY Times';font-weight:400;font-style:normal;font-display:swap;src:url('/assets/fonts/tinos-greek-400-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Times';font-weight:400;font-style:normal;font-display:swap;src:url('/assets/fonts/tinos-latin-400-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Times';font-weight:400;font-style:italic;font-display:swap;src:url('/assets/fonts/tinos-greek-400-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Times';font-weight:400;font-style:italic;font-display:swap;src:url('/assets/fonts/tinos-latin-400-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Times';font-weight:700;font-style:normal;font-display:swap;src:url('/assets/fonts/tinos-greek-700-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Times';font-weight:700;font-style:normal;font-display:swap;src:url('/assets/fonts/tinos-latin-700-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Times';font-weight:700;font-style:italic;font-display:swap;src:url('/assets/fonts/tinos-greek-700-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Times';font-weight:700;font-style:italic;font-display:swap;src:url('/assets/fonts/tinos-latin-700-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Helvetica';font-weight:400;font-style:normal;font-display:swap;src:url('/assets/fonts/arimo-greek-400-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Helvetica';font-weight:400;font-style:normal;font-display:swap;src:url('/assets/fonts/arimo-latin-400-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Helvetica';font-weight:400;font-style:italic;font-display:swap;src:url('/assets/fonts/arimo-greek-400-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Helvetica';font-weight:400;font-style:italic;font-display:swap;src:url('/assets/fonts/arimo-latin-400-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Helvetica';font-weight:700;font-style:normal;font-display:swap;src:url('/assets/fonts/arimo-greek-700-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Helvetica';font-weight:700;font-style:normal;font-display:swap;src:url('/assets/fonts/arimo-latin-700-normal.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Helvetica';font-weight:700;font-style:italic;font-display:swap;src:url('/assets/fonts/arimo-greek-700-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;}
@font-face{font-family:'SDY Helvetica';font-weight:700;font-style:italic;font-display:swap;src:url('/assets/fonts/arimo-latin-700-italic.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:'SDY Computer Modern';font-weight:400;font-style:normal;font-display:swap;src:url('/assets/fonts/cmunrm.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;}
@font-face{font-family:'SDY Computer Modern';font-weight:400;font-style:italic;font-display:swap;src:url('/assets/fonts/cmunti.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;}
@font-face{font-family:'SDY Computer Modern';font-weight:700;font-style:normal;font-display:swap;src:url('/assets/fonts/cmunbx.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;}
@font-face{font-family:'SDY Computer Modern';font-weight:700;font-style:italic;font-display:swap;src:url('/assets/fonts/cmunbi.woff2') format('woff2');ascent-override:80%;descent-override:20%;line-gap-override:0%;}

        /* 데스크톱 zoom 제거 — NoteFlow 레퍼런스 1:1 비율 매칭 */
        @media (min-width:641px) and (pointer:fine){ html{zoom:1;} }
        *{font-family:'Jua','Pretendard Variable','Pretendard',-apple-system,BlinkMacSystemFont,system-ui,sans-serif;margin:0;padding:0;box-sizing:border-box;}

        /* 16.24 · 유틸리티 클래스 복구 — HTML이 쓰는 레이아웃 유틸(flex·w-full·py-4 등)이
           어디에도 정의돼 있지 않아 데스크톱 헤더가 세로로 쌓이는 등 화면이 깨졌다.
           (폰 전용 미디어쿼리는 각자 !important 로 덮어쓰므로 영향 없음) */
        .flex{display:flex;}
        .hidden{display:none !important;}
        .w-full{width:100%;}
        .items-center{align-items:center;}
        .justify-between{justify-content:space-between;}
        .gap-3{gap:12px;}
        .py-4{padding-top:16px;padding-bottom:16px;}
        .px-6{padding-left:24px;padding-right:24px;}
        .pt-8{padding-top:32px;}
        .pb-10{padding-bottom:40px;}
        .mb-1{margin-bottom:4px;}
        .mb-2{margin-bottom:8px;}
        .mb-3{margin-bottom:12px;}
        .mb-4{margin-bottom:16px;}
        .mb-5{margin-bottom:20px;}
        .font-bold{font-weight:700;}
        .text-lg{font-size:18px;line-height:28px;}
        .text-sm{font-size:14px;line-height:20px;}
        html{-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:hidden;}
        /* 9.3 · 데스크톱 휠 스크롤 복구
           body{overflow-x:hidden}는 body를 "세로로도 스크롤 가능한 컨테이너"로 만든다.
           그런데 body는 내용과 높이가 같아 실제로는 스크롤될 수 없고, 여기에
           overscroll-behavior-y:none 이 붙으면 휠 델타가 body에서 삼켜져
           루트(html)로 전달되지 않는다 → 휠은 죽고 스크롤바 드래그만 살아 있음.
           overflow-x:clip 은 가로 잘라내기는 그대로 하면서 스크롤 컨테이너를
           만들지 않으므로, 휠이 정상적으로 루트까지 도달한다.
           (부수 효과로 sticky 헤더도 다시 붙는다.) */
        body{overflow-x:hidden;}
        @supports (overflow-x:clip){ body{overflow-x:clip;} }
        body{-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;}
        button,a,.tool-btn,.side-btn,.ctx-item,.note-card,.folder-card,.link-chip,
        .emoji-opt,.fcolor-dot,.ficon-btn,.size-preset-card,.sp-item,.sp-sec,
        .vault-btn,.key-row,.tgl,.split-btn,.font-btn,.cp-item{
            touch-action:manipulation;       /* 더블탭 줌·클릭 지연 제거 */
            -webkit-tap-highlight-color:transparent;
        }
        /* iOS 자동 확대 방지: 입력창 글자를 16px 이상으로 */
        @media(max-width:640px){
            input[type=text],input[type=search],input[type=password],
            input[type=number],textarea{font-size:16px !important;}
        }
        :root{
            --bg:#ffffff;--bg2:#f7f7f8;--card:#ffffff;--text1:#0F172A;--text2:#334155;--text3:#64748B;
            /* 14.80.1 · 로고 여백 하양(실측 #FFFFFF) — 로고가 앉는 면(헤더·스플래시·사이드바·배지)을
               이 색으로 통일해 트림한 로고의 여백이 면과 섞여 이음새가 보이지 않게 한다. */
            --logo-paper:#FFFFFF;
            --border:#e2e8f0;--accent:#14366E;--accent2:#0F2A5A;--shadow:0 2px 12px rgba(0,0,0,0.06);
            --line:#e2e8f0;--dot:#cbd5e1;
            /* 14.72.6 · 에디터 주변 배경(캔버스) — 노트(종이)는 그대로 두고
               종이 바깥에만 어두운 캔버스를 깔아 문서가 떠 있는 것처럼 보인다. */
            --editor-canvas:rgba(40,40,40,1);   /* 14.80.2 · 종이 옆 캔버스 — 사용자 지정 다크 그레이 */
            --paper-shadow:0 1px 3px rgba(23,28,41,.10),0 12px 32px -8px rgba(23,28,41,.18);
            --notif-dot:#FFEE00;--notif-dot-ink:#18181B;
        }
        .dark{
            --bg:#0F172A;--bg2:#1E293B;--card:#1E293B;--text1:#E2E8F0;--text2:#94A3B8;--text3:#64748B;
            --border:#334155;--accent:#2A5BD0;--accent2:#14366E;--shadow:0 2px 12px rgba(0,0,0,0.4);
            --line:#334155;--dot:#475569;
            --editor-canvas:rgba(40,40,40,1);
            --paper-shadow:0 1px 3px rgba(0,0,0,.5),0 14px 34px -8px rgba(0,0,0,.55);
            --notif-dot:#FFEE00;--notif-dot-ink:#18181B;
        }
        body{background:var(--bg);color:var(--text1);}

        /* ===== 9.4 · 홈 화면 배경 사진 ===== */
        #wallLayer{
            position:fixed;inset:0;z-index:-1;pointer-events:none;
            background-position:center center;background-size:cover;background-repeat:no-repeat;
            background-attachment:fixed;opacity:0;transition:opacity .5s ease;
            overflow:visible;
        }
        /* 14.9 · 배경 동영상(mp4) — 꽉 채우고, 얇은 막(#wallLayer::after)이 위를 덮는다 */
        #wallLayer video{
            position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
            display:none;pointer-events:none;
        }
        body.has-wall #wallLayer{opacity:1;}
        /* 사진 위에서도 글씨가 읽히도록 얇은 막을 덮는다 (진하기는 설정에서 조절) */
        #wallLayer::after{
            content:'';position:absolute;inset:0;
            background:var(--bg);opacity:var(--wall-veil,.34);
        }
        /* 배경이 있으면 카드·헤더를 살짝 비쳐 보이게 */
        body.has-wall .header{backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);
            background:color-mix(in srgb, var(--card) 78%, transparent);}
        body.has-wall .note-card,body.has-wall .folder-card{
            backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);
            background:color-mix(in srgb, var(--card) 86%, transparent);}
        /* 노트를 열면(편집 화면) 배경 사진은 방해되지 않게 숨긴다 */
        body:has(#editorView.open) #wallLayer{opacity:0;}
        /* 15.1 수정 · 에디터가 열려 있을 땐 오로라(#sdyAmbient)도 숨긴다.
           오로라는 will-change + 무한 애니메이션을 가진 레이어라, 그 위에
           전체 화면 에디터가 덮이면 합성 부답이 커져 에디터 본문이 하얗게
           비어 보이는 렌더링 문제의 원인이 된다. 배경 사진 숨김과 같은 맥락. */
        body:has(#editorView.open) #sdyAmbient{opacity:0;}

        /* 노트를 편집할 때 바깥 html/body 스크롤바를 숨겨 이중 스크롤바 방지 */
        html:has(#editorView.open),
        body:has(#editorView.open),
        html.in-editor,
        body.in-editor {
            overflow: hidden !important;
        }
        .wall-prev{width:74px;height:46px;border-radius:5px;border:1px solid var(--border);
            background-size:cover;background-position:center;flex:none;background-color:var(--bg2);}

        /* ===== 첫 진입 로딩 화면 (도구·글꼴을 미리 불러오는 동안 표시) ===== */
        #splash{
            position:fixed;inset:0;z-index:10000;display:flex;flex-direction:column;
            align-items:center;justify-content:center;gap:18px;
            background:var(--logo-paper);
            transition:opacity .45s ease, visibility .45s ease;
        }
        #splash.hide{opacity:0;visibility:hidden;pointer-events:none;}
        #splash .sp-logo{
            width:92px;height:92px;border-radius:22px;flex:none;
            background:var(--logo-paper);
            display:flex;align-items:center;justify-content:center;
            animation:spPulse 1.6s ease-in-out infinite;
        }
        @keyframes spPulse{0%,100%{transform:scale(1);}50%{transform:scale(1.07);}}
        #splash .sp-title{
            display:flex;align-items:center;justify-content:center;
            font-family:'Jua','Pretendard Variable',sans-serif;font-weight:700;font-size:24px;color:var(--text1);
        }
        /* 14.81.0 · 스플래시는 워드마크 하나(powered-by 락업 제거) — 스크립트 로고만 또렷하게 */
        #splash .sp-title .brand-wordmark{height:62px;width:auto;max-width:min(78vw,420px);object-fit:contain;display:block;}
        #splash .sp-bar{width:180px;height:4px;border-radius:4px;background:var(--bg2);overflow:hidden;}
        #splash .sp-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),#8e5cf7);
            transition:width .3s ease;border-radius:4px;}
        #splash .sp-msg{font-size:12px;color:var(--text3);min-height:16px;transition:opacity .2s;}

        /* (14.29.1 의 로딩 화면 서명 .sp-brand CSS 는 14.81.0 에서 제거 — 요소가 14.80.3 에 이미 사라졌고,
           진입 화면은 SDYnotes 로고만 남긴다.) */

        /* 노트(에디터) 진입 시 짧은 로딩 표시
           9.1 · z-index 를 비밀번호 창(.modal-bg)보다 낮게 내렸다.
           예전엔 9999 라서 '잠금 해제 중…' 가림막이 비밀번호 창을 통째로 덮었고,
           사용자는 입력할 수도 취소할 수도 없이 화면이 멈춘 것처럼 보였다. */
        #edLoading{
            position:fixed;inset:0;z-index:250;display:none;align-items:center;justify-content:center;
            background:var(--bg);background:color-mix(in srgb, var(--bg) 82%, transparent);
            backdrop-filter:blur(2px);
        }
        #edLoading.show{display:flex;}
        #edLoading .ed-box{display:flex;flex-direction:column;align-items:center;gap:12px;}
        #edLoading .ed-spin{width:40px;height:40px;border-radius:50%;
            border:3px solid var(--border);border-top-color:var(--accent);
            animation:spin .7s linear infinite;}
        #edLoading .ed-txt{font-size:12.5px;color:var(--text2);}

        /* ===== 노트 추가/삭제 뽑기 기계(크레인) 애니메이션 =====
           14.13.2 · 집게는 카드 폭에 비례해 --claw-scale 로 크기가 변한다
           (기본 크기 100×60 → 200px 카드에선 1.6배). 들고 있는 노트는
           transform-origin 50% 0(= 집게 발끝)을 중심으로 집게와 같은
           각도로 매달린다. */
        #clawFx{position:fixed;inset:0;z-index:10050;pointer-events:none;display:none;overflow:hidden;}
        #clawFx .claw-wire{position:absolute;left:0;top:0;width:4px;z-index:1;
            background:linear-gradient(180deg,#49525c,#98a2ad 45%,#49525c);
            box-shadow:0 0 4px rgba(0,0,0,.4);
            border-radius:2px;
            /* 줄의 윗점을 축으로 회전한다. JS가 같은 --claw-angle을 집게에도
               넣으므로 기울어진 화면에서도 줄과 집게 중심축이 한 줄로 이어진다. */
            transform-origin:50% 0;
            transform:translateX(-50%) rotate(var(--claw-angle,0deg));
            will-change:transform,height;}
        #clawFx .claw-head{position:absolute;left:0;top:0;width:100px;height:60px;z-index:3;
            transform-origin:50% 0;
            transform:translateX(-50%) rotate(var(--claw-angle,0deg)) scale(var(--claw-scale,1));
            will-change:transform;transition:none;overflow:visible;
            filter:drop-shadow(0 6px 10px rgba(0,0,0,.28));}
        /* Tailwind svg{height:auto} 가 집게를 납작하게 만들지 않게, svg 자체만 고정한다.
           svg * 에 크기를 주면 linearGradient 가 깨져 폴더로 옮길 때 집게가 안 보였다. */
        #clawFx .claw-head svg{
            width:100px!important;height:60px!important;max-width:none!important;max-height:none!important;
            display:block!important;}
        .katex-error{color:inherit!important;background:none!important;}
        #clawFx .claw-note{position:absolute;left:0;top:0;will-change:transform;transition:none;
            transform-origin:50% 0;}
        /* 14.13.6 · 홈 스택 클론이 가져오는 translate(-50%,-50%)+rotate 를 벗겨
           실제 카드 박스만 남긴다. 매달림 회전은 부모 .claw-note 가 맡는다. */
        #clawFx .claw-note .note-card,
        #clawFx .claw-note .folder-card{
            position:relative !important;left:auto !important;top:auto !important;
            right:auto !important;bottom:auto !important;margin:0 !important;
            transform:none !important;transform-origin:50% 0;
            max-width:none !important;box-shadow:0 16px 38px rgba(0,0,0,.34);}
        #clawFx .claw-unit{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;}
        /* 집게가 내려놓은 카드가 살짝 '착지'하며 안정되는 모션 */
        @keyframes clawLand{from{transform:scale(.988) translateY(3px);}to{transform:none;}}
        .note-card.claw-landed,.folder-card.claw-landed{animation:clawLand .3s cubic-bezier(.2,.8,.3,1);}

        /* 상단 동기화 로딩바 — 산만해서 없앰.
           (저장 상태는 툴바의 '저장됨' 글자로 조용히 알려준다) */
        #syncBar{display:none !important;}

        /* 홈 상단바: 검색/주소줄처럼 보이는 영역을 한 단계 얇게 */
        .header{background:var(--logo-paper);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:50;
            padding:9px 18px !important;}
        .header #searchInput{height:32px !important;}
        .app-brand h1{
            /* 14.80.1 · 제목은 가로 로고(워드마크) 이미지 — 사용자 지정 앱 제목일 때만 글자로 대체 */
            display:flex;align-items:center;min-width:0;color:var(--text1);
            line-height:0;margin:0;
        }
        /* 14.97 · 워드마크 글자 무게가 캔버스 위쪽에 쏠려(질량 중심 ≈ 41%) 정사각
           아이콘보다 떠 보인다 — 아이콘과 같은 높이 + 2px 내려 광학 중심을 맞춘다. */
        .app-brand h1 .brand-wordmark{
            height:32px;width:auto;max-width:100%;object-fit:contain;
            display:block;flex:none;transform:translateY(2px);
        }
        .app-brand .logo-dot{
            width:32px;height:32px;border-radius:8px;flex-shrink:0;
            background:var(--logo-paper);
            display:flex;align-items:center;justify-content:center;
        }
        /* 17.4 · 로고는 평소 깃털펜 아이콘만 — 마우스를 올리면 오른쪽으로
           펼쳐지며 '동엽신의 끄적끄적'이 나타난다. (호버 없는 기기·폰은 종전대로) */
        @media (hover:hover) and (min-width:901px){
            .app-brand h1{
                max-width:0;opacity:0;padding-left:0;padding-right:0;
                transform:translateX(-8px);pointer-events:none;
                transition:max-width .5s cubic-bezier(.22,.9,.3,1),opacity .28s ease,transform .5s cubic-bezier(.22,.9,.3,1);
            }
            .app-brand .logo-dot:hover + h1,
            .app-brand .logo-dot:focus-visible + h1{
                max-width:300px;opacity:1;transform:translateX(0);
            }
            .app-brand .logo-dot{
                transition:transform .35s cubic-bezier(.22,.9,.3,1.2),box-shadow .3s,border-radius .3s;
            }
            .app-brand .logo-dot:hover,
            .app-brand .logo-dot:focus-visible{
                transform:rotate(-8deg) scale(1.07);border-radius:10px;
                box-shadow:0 5px 16px rgba(23,28,38,.3);
            }
        }
        /* 14.14 · 폰 헤더/본문 여백은 문서 끝 v1414-phone 블록 한 곳에서
           정한다. 예전엔 여기서 헤더를 flex-wrap:wrap 으로 두 줄로 만들고
           아래쪽 v88-mobile 이 다시 한 줄로 되돌리는 식으로 서로 싸워서,
           아이콘 개수에 따라 헤더 높이가 들쭉날쭉했다. */
        @media(max-width:640px){
            .breadcrumb{padding:0 10px 6px;flex-wrap:wrap;}
            #noteGrid{margin-top:8px !important;}
        }

        /* ===== Note Cards ===== */
        /* ===== 자주 가는 링크 ===== */
        .link-bar{display:flex;align-items:center;gap:6px;margin-left:10px;flex-wrap:nowrap;overflow:hidden;}
        @media(max-width:900px){
            .link-bar{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:34vw;}
            .link-bar::-webkit-scrollbar{display:none;}
            .link-chip span{display:none;}      /* 좁으면 아이콘만 */
            .link-chip{padding:7px 9px;}
        }
        @media(max-width:640px){
            /* 제목이 잘리지 않도록 링크바를 아랫줄로 내린다 */
            .app-brand{flex-wrap:wrap;}
            .app-brand h1{flex:0 0 auto;overflow:visible !important;text-overflow:clip !important;}
            .link-bar{max-width:none;flex:1 1 100%;order:4;margin-left:0;padding:2px 0;}
            .link-chip span{display:inline;}
            .link-chip{padding:5px 10px;font-size:11.5px;}
            .link-add{width:26px;height:26px;}
        }
        /* 14.14 · 북마크 바 — 뒤가 비치는 유리 */
        .link-bar{
            padding:3px 8px;border-radius:999px;
            background:color-mix(in srgb, var(--card) 30%, transparent);
            border:1px solid color-mix(in srgb, var(--border) 42%, transparent);
            backdrop-filter:blur(12px) saturate(150%);
            -webkit-backdrop-filter:blur(12px) saturate(150%);
            box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 2px 10px rgba(16,24,40,.06);
        }
        .dark .link-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
            background:color-mix(in srgb, var(--card) 24%, transparent);
            border-color:color-mix(in srgb, var(--border) 55%, transparent);
            box-shadow:inset 0 1px 0 rgba(255,255,255,.07),0 2px 12px rgba(0,0,0,.28);
        }
        .link-bar:empty{display:none;}
        /* 13.0 · 깔끔하고 세련된 바로가기(북마크) 칩 디자인 */
        .link-chip{
            display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;
            background:color-mix(in srgb, var(--card) 42%, transparent);
            backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
            border:1px solid color-mix(in srgb, var(--border) 55%, transparent);
            color:var(--text2);font-size:12px;font-weight:600;letter-spacing:-0.01em;
            text-decoration:none;white-space:nowrap;transition:all .18s cubic-bezier(.22,.9,.3,1);
            position:relative;max-width:160px;box-shadow:0 1px 3px rgba(0,0,0,.04);
        }
        .link-chip:hover{
            border-color:color-mix(in srgb, var(--accent) 55%, var(--border));
            background:color-mix(in srgb, var(--accent) 16%, color-mix(in srgb, var(--card) 60%, transparent));
            color:var(--text1);transform:translateY(-1px);
            box-shadow:0 3px 10px color-mix(in srgb, var(--accent) 16%, transparent);
        }
        .link-chip .lc-ico{width:15px;height:15px;border-radius:4px;flex-shrink:0;object-fit:contain;}
        .link-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .link-chip .lc-del{
            display:none;position:absolute;right:-5px;top:-5px;width:16px;height:16px;border-radius:50%;
            background:#e74c3c;color:#fff;font-size:9px;align-items:center;justify-content:center;
        }
        .link-chip:hover .lc-del{display:flex;}
        .link-add{
            width:26px;height:26px;border-radius:50%;
            border:1px solid color-mix(in srgb, var(--border) 60%, transparent);
            background:color-mix(in srgb, var(--card) 40%, transparent);
            backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
            color:var(--text3);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
            font-size:14px;flex-shrink:0;transition:all .18s cubic-bezier(.22,.9,.3,1);
            box-shadow:0 1px 3px rgba(0,0,0,.04);
        }
        .link-add:hover{
            border-color:var(--accent);color:var(--accent);
            background:color-mix(in srgb, var(--accent) 10%, var(--card));
            transform:scale(1.06);box-shadow:0 2px 8px color-mix(in srgb, var(--accent) 20%, transparent);
        }
        /* 북마크 길게 눌러 순서 변경 */
        .link-chip.link-insert{outline:2px solid var(--accent);outline-offset:2px;}
        /* 10.0 · 길게 눌러 끌기가 폰에서 안 되던 원인 하나: iOS/Android 는 링크를
           꾹 누르면 시스템 미리보기/메뉴를 띄우며 터치를 뺏어 간다. 막는다. */
        .link-chip{-webkit-touch-callout:none;-webkit-user-select:none;
            -khtml-user-select:none;-moz-user-select:none;}
        /* 구글 북마크바처럼 칩 '사이'에 삽입 공간(세로 막대) 표시 */
        .link-chip.link-ins-before::before{content:'';position:absolute;left:-4px;top:4px;bottom:4px;
            width:3px;border-radius:2px;background:var(--accent);
            box-shadow:0 0 6px rgba(79,110,247,.6);}
        .link-chip.link-ins-after::after{content:'';position:absolute;right:-4px;top:4px;bottom:4px;
            width:3px;border-radius:2px;background:var(--accent);
            box-shadow:0 0 6px rgba(79,110,247,.6);}
        #linkGhost{position:fixed;z-index:900;pointer-events:none;opacity:.92;
            box-shadow:0 8px 24px rgba(0,0,0,.32);}

        /* 오프라인 / 동기화 대기 표시 */
        .offline-badge{
            display:flex;align-items:center;gap:6px;padding:6px 11px;border-radius:999px;
            font-size:11.5px;font-weight:700;cursor:pointer;white-space:nowrap;
            border:1px solid transparent;transition:all .2s;
        }
        .offline-badge.off{background:rgba(231,76,60,.12);color:#e74c3c;border-color:rgba(231,76,60,.35);}
        .offline-badge.wait{background:rgba(243,156,18,.14);color:#d68910;border-color:rgba(243,156,18,.4);}
        .offline-badge:hover{filter:brightness(.94);}

        /* ===== 관리자 모드 ===== */
        /* 25.0 · #adminBanner(상단 '관리자 모드' 띠) 제거 — 관리자 버튼 재클릭으로 종료한다 */
        body.admin-on .note-card.locked .lock-overlay{opacity:.35;}
        .admin-chip{
            display:inline-flex;align-items:center;gap:4px;padding:1px 7px;border-radius:3px;
            background:#1f2937;color:#fff;font-size:10px;font-weight:700;margin-left:6px;
        }
        /* 15.40 · .admin-btn(헤더 방패) 규칙은 없앴다 — 그 단추 자체가 사라졌고,
           관리자 모드 상태는 사이드바 'Admin Mode' 줄(body.admin-on)이 보여 준다. */
        /* 로그인 환영 인사 */
        #welcomeToast{
            position:fixed;left:50%;top:74px;transform:translate(-50%,-24px) scale(.96);
            z-index:1400;display:flex;align-items:center;gap:13px;
            padding:15px 24px 15px 18px;border-radius:5px;
            background:linear-gradient(135deg,#111827,#374151);color:#fff;
            box-shadow:0 18px 46px rgba(0,0,0,.34);
            opacity:0;pointer-events:none;transition:opacity .32s ease,transform .32s cubic-bezier(.2,.9,.3,1);
        }
        #welcomeToast.show{opacity:1;transform:translate(-50%,0) scale(1);}
        #welcomeToast .wc-ico{
            width:40px;height:40px;border-radius:4px;flex-shrink:0;
            background:linear-gradient(135deg,#3b82f6,#8b5cf6);
            display:flex;align-items:center;justify-content:center;font-size:20px;
        }
        #welcomeToast .wc-title{font-size:15.5px;font-weight:800;letter-spacing:-.2px;}
        #welcomeToast .wc-sub{font-size:11.5px;opacity:.72;margin-top:2px;}
        .note-card .page-count-badge{left:auto;right:8px;}

        /* 다른 사용자의 마우스 */
        .live-cur{
            position:fixed;left:0;top:0;z-index:1050;pointer-events:none;
            /* left/top 보간은 매 프레임 레이아웃을 다시 잡고 0.1초씩 뒤를 쫓았다.
               GPU transform을 짧게 보간해 현재 위치에는 빠르게 붙고 이동은 매끈하게. */
            transform:translate3d(var(--live-x,0),var(--live-y,0),0);
            transition:transform .045s linear;
            will-change:transform;
            filter:drop-shadow(0 1px 2px rgba(0,0,0,.25));
        }
        /* 14.18.4 · 상대 커서는 '색만' — 이름·지금 하는 일은 왼쪽 범례가 안내한다.
           그리는 중(mode:draw)엔 펜촉, 글 쓰는 중(mode:type)엔 깜빡이 캐럿으로 바뀐다. */
        .live-cur .lc{display:none;}
        .live-cur .lc-arrow{display:block;}
        .live-cur.draw .lc-arrow{display:none;}
        .live-cur.draw .lc-pen{display:block;}
        .live-cur.type .lc-arrow{display:none;}
        .live-cur.type .lc-caret{display:block;}
        .live-cur .lc-pen{
            position:absolute;left:-3px;top:-17px;font-size:18px;line-height:1;
            filter:drop-shadow(0 1px 1px rgba(0,0,0,.3));
        }
        .live-cur .lc-caret{
            position:absolute;left:-1.5px;top:-20px;width:3px;height:20px;border-radius:2px;
            background:currentColor;box-shadow:0 0 0 1px rgba(255,255,255,.65);
            animation:liveCaretBlink 1.05s steps(1,end) infinite;
        }
        @keyframes liveCaretBlink{0%,55%{opacity:1;}56%,100%{opacity:0;}}
        /* 왼쪽 범례 — 색 점 + 이름(+ 지금 하는 일). 상대가 있을 때만 보인다. */
        .live-legend{
            position:fixed;left:10px;top:104px;z-index:1051;pointer-events:none;
            display:flex;flex-direction:column;gap:4px;max-width:190px;
        }
        .live-legend .ll-row{
            display:flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;
            background:color-mix(in srgb, var(--card) 78%, transparent);
            border:1px solid color-mix(in srgb, var(--border) 60%, transparent);
            backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
            font-size:11px;color:var(--text1);line-height:1.3;
            box-shadow:0 1px 5px rgba(16,24,40,.08);
        }
        .live-legend .ll-dot{
            flex:none;width:8px;height:8px;border-radius:50%;
            box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.7);
        }
        .live-legend .ll-nm{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
        .live-legend .ll-row.me .ll-nm{color:var(--accent);}
        .live-legend .ll-act{color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:10.5px;}
        @media(max-width:640px){
            .live-legend{top:auto;bottom:70px;left:8px;max-width:150px;}
        }
        /* 노트 안의 링크는 파랗게 */
        .tb-content a{ color:#2563eb;text-decoration:underline;cursor:pointer; }
        .dark .tb-content a:not(:where(.sdy-editor-light,.sdy-editor-light *)){ color:#60a5fa; }
        .import-btn{
            width:100%;display:flex;align-items:center;gap:12px;padding:13px 15px;
            border:1px solid var(--border);border-radius:4px;background:var(--bg2);
            cursor:pointer;transition:all .16s;
        }
        .import-btn:hover{ border-color:#2563eb;background:rgba(37,99,235,.06); }
        @keyframes impSpin{ to{ transform:rotate(360deg); } }
        #importSpin{ animation:impSpin 1s linear infinite; }

        /* ═══════════════════════════════════════════════════════════════
           25.0 · 파일 보관함 — '드라이브' 화면 디자인 시스템
           ─────────────────────────────────────────────────────────────
           보관함이 720px 창에서 **화면 전체를 쓰는 파일 관리자**로 바뀌었다.
           구글 드라이브의 뼈대를 그대로 가져온다:
             · 왼쪽 레일 268px — 노트로 돌아가기 · 새로 올리기 · 분류 · 저장공간
             · 가운데         — 상단줄(검색) + 머리줄(개수·정렬·보기) + 목록/그리드
             · 오른쪽 320px   — 고른 파일의 미리보기와 메타(세부정보)
           색은 전부 앱 토큰(--nf-*)에서 받아 온다 — 라이트/다크가 저절로 따라온다.
           값 하나만 바꾸려면 아래 토큰 칸만 고치면 된다.

           (예전 '윈도우 탐색기' 칸은 스티커 보관함이 같은 격자를 쓰므로
            '스티커 격자' 구역으로 이름만 바꿔 남겨 두었다 — .vault-grid · .v-file)
           ═══════════════════════════════════════════════════════════════ */

        /* ── 토큰 ─────────────────────────────────────────────────── */
        /* 토큰이 .vd 안에만 살면 안 된다 — 메뉴 · 대화상자 · 끌어다 놓기 ·
           올리기 대기열은 스크림 밖, <body> 바로 아래에 따로 붙어 있어서
           여기서 이름을 빼면 var(--vd-card) 가 통째로 무효가 되고
           배경 · 테두리 · 그림자가 사라진다.
           (15.41.3 — 우클릭 메뉴가 '완전히 투명'했던 진짜 원인) */
        .vd,.vd-menu,.vd-dialog,.vd-dropzone,.vd-queue,.vd-preview{
            /* 표면 · 잉크 — 프로(노트플로) 토큰을 그대로 물려받는다 */
            --vd-page:  var(--nf-page,  #FCFCFD);
            --vd-rail:  var(--nf-side-a,#FAF9F9);
            --vd-card:  var(--nf-card,  #FFFFFF);
            --vd-ink:   var(--nf-ink,   #1C1C28);
            --vd-ink2:  var(--nf-ink2,  #4B5563);
            --vd-sub:   var(--nf-sub,   #8F90A0);
            --vd-faint: var(--nf-faint, #A0A1AD);
            --vd-line:  var(--nf-line,  #EDEEF3);
            --vd-hair:  var(--nf-hair,  #F0F0F4);
            --vd-field: var(--nf-field, #F5F5F8);
            --vd-hover: var(--nf-hover, #F1F0F7);
            --vd-on:    var(--nf-on,    #ECEAF8);
            --vd-acc:      var(--nf-violet,     #8B7AE8);
            --vd-acc-ink:  var(--nf-violet-ink, #6F5CC4);
            --vd-acc-soft: var(--nf-violet-soft,#F1EEFC);
            --vd-red:   var(--nf-red,   #F4614B);
            --vd-ok:    #12A594;
            --vd-warn:  #E8A33D;
            --vd-sh:    var(--nf-sh-card,   0 1px 2px rgba(16,24,40,.04),0 10px 24px -16px rgba(16,24,40,.14));
            --vd-sh-lg: var(--nf-sh-card-h, 0 2px 4px rgba(16,24,40,.05),0 16px 32px -18px rgba(16,24,40,.20));
            /* 치수 */
            --vd-rail-w:   268px;
            --vd-detail-w: 324px;
            --vd-top-h:    64px;
            --vd-sub-h:    46px;
            --vd-row-h:    48px;
            --vd-r-card:   var(--nf-r-card,16px);
            --vd-r-row:    var(--nf-r-row,9px);
            /* 파일 종류 색 — 드라이브의 그 톤 */
            --vd-c-image:  #12A594;
            --vd-c-video:  #8B5CF6;
            --vd-c-audio:  #E0619B;
            --vd-c-pdf:    #E5484D;
            --vd-c-doc:    #2F6FED;
            --vd-c-sheet:  #17A34A;
            --vd-c-slide:  #EA7317;
            --vd-c-archive:#C99114;
            --vd-c-code:   #0EA5E9;
            --vd-c-text:   #7A8194;
            --vd-c-other:  #8A8F9C;
        }

        /* ── 화면 껍데기 ──────────────────────────────────────────── */
        /* 창이 아니라 '이동한 화면'이다 — 앱 위에 불투명하게 덮이고,
           아래에서 살짝 밀려 올라오며 자리를 잡는다. */
        .vd{
            position:fixed;inset:0;z-index:1500;
            display:grid;
            grid-template-columns:var(--vd-rail-w) minmax(0,1fr) 0px;
            grid-template-rows:minmax(0,100%);
            background:var(--vd-page);color:var(--vd-ink);
            font-size:13.5px;line-height:1.5;letter-spacing:-.011em;
            opacity:0;visibility:hidden;pointer-events:none;
            transform:translate3d(0,20px,0) scale(.993);
            transition:opacity .18s ease,transform .36s cubic-bezier(.2,.74,.24,1),
                       grid-template-columns .26s cubic-bezier(.2,.74,.24,1),
                       visibility 0s linear .36s;
        }
        .vd.open{
            opacity:1;visibility:visible;pointer-events:auto;transform:none;
            transition:opacity .2s ease,transform .36s cubic-bezier(.2,.74,.24,1),
                       grid-template-columns .26s cubic-bezier(.2,.74,.24,1),
                       visibility 0s;
        }
        .vd.detail-on{grid-template-columns:var(--vd-rail-w) minmax(0,1fr) var(--vd-detail-w);}
        .vd *{box-sizing:border-box;}
        .vd button{font-family:inherit;color:inherit;}
        .vd ::selection{background:color-mix(in srgb,var(--vd-acc) 26%,transparent);}
        .vd b,.vd strong{font-weight:650;}

        /* 화면이 떠 있는 동안 뒤 앱은 스크롤·포커스에서 빠진다 */
        body.vault-open{overflow:hidden;}

        /* ── 1) 왼쪽 레일 ─────────────────────────────────────────── */
        .vd-rail{
            grid-column:1;display:flex;flex-direction:column;min-height:0;
            background:var(--vd-rail);border-right:1px solid var(--vd-hair);
            padding:12px 12px 10px;gap:12px;
        }
        .vd-rail-head{display:flex;flex-direction:column;gap:10px;flex:none;}
        .vd-back{
            align-self:flex-start;display:inline-flex;align-items:center;gap:7px;
            height:32px;padding:0 12px 0 9px;border:1px solid var(--vd-line);border-radius:999px;
            background:var(--vd-card);color:var(--vd-ink2);font-size:12.5px;font-weight:600;
            cursor:pointer;box-shadow:var(--vd-sh);
            transition:transform .14s,box-shadow .16s,color .14s,border-color .14s;
        }
        .vd-back i{font-size:15px;}
        .vd-back:hover{color:var(--vd-acc-ink);border-color:color-mix(in srgb,var(--vd-acc) 40%,var(--vd-line));transform:translateX(-1px);}
        .vd-back:active{transform:translateX(0) scale(.98);}

        .vd-brand{display:flex;align-items:center;gap:10px;padding:2px 4px 0;}
        .vd-brand-mark{width:30px;height:30px;border-radius:8px;flex:none;
            box-shadow:0 1px 3px rgba(16,24,40,.14);background:var(--vd-card);}
        .vd-brand-txt{display:flex;flex-direction:column;min-width:0;}
        .vd-brand-txt b{font-size:14.5px;font-weight:700;color:var(--vd-ink);letter-spacing:-.02em;}
        .vd-brand-txt span{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--vd-sub);font-weight:500;}
        .vd-brand-txt span i{font-size:12px;color:var(--vd-acc-ink);}

        /* '새로 올리기' — 드라이브의 New 버튼(흰 알약 + 그림자 + 4색 +) */
        .vd-new{
            display:flex;align-items:center;gap:12px;width:100%;height:46px;
            padding:0 18px 0 14px;border:1px solid var(--vd-line);border-radius:14px;
            background:var(--vd-card);color:var(--vd-ink);cursor:pointer;
            font-size:13.5px;font-weight:600;box-shadow:var(--vd-sh);
            transition:box-shadow .18s,transform .14s,background .16s;
        }
        .vd-new i{
            font-size:20px;color:var(--vd-acc-ink);
            transition:transform .3s cubic-bezier(.2,.8,.2,1);
        }
        .vd-new:hover{box-shadow:var(--vd-sh-lg);background:var(--vd-card);}
        .vd-new:hover i{transform:rotate(90deg);}
        .vd-new:active{transform:scale(.985);}

        /* 분류 목록 */
        .vd-nav{
            flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
            display:flex;flex-direction:column;gap:1px;padding:2px 0 6px;
            scrollbar-width:thin;
        }
        .vd-nav-sec{
            padding:12px 12px 5px;font-size:10.5px;font-weight:700;letter-spacing:.08em;
            text-transform:uppercase;color:var(--vd-faint);
        }
        .vd-nav-i{
            position:relative;display:flex;align-items:center;gap:12px;
            height:38px;padding:0 14px;border:0;border-radius:999px;background:transparent;
            color:var(--vd-ink2);font-size:13px;font-weight:550;cursor:pointer;text-align:left;
            transition:background .13s,color .13s;
        }
        .vd-nav-i > i{font-size:17px;color:var(--vd-sub);flex:none;transition:color .13s,transform .18s;}
        .vd-nav-i > span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .vd-nav-i .vd-nav-n{
            flex:none;font-size:11px;font-weight:650;color:var(--vd-faint);
            font-variant-numeric:tabular-nums;
        }
        .vd-nav-i:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-nav-i:hover > i{color:var(--vd-ink2);}
        .vd-nav-i.on{background:var(--vd-on);color:var(--vd-acc-ink);font-weight:650;}
        .vd-nav-i.on > i{color:var(--vd-acc-ink);}
        .vd-nav-i.on .vd-nav-n{color:var(--vd-acc-ink);}
        .vd-nav-i.tint-image  > i{color:var(--vd-c-image);}
        .vd-nav-i.tint-video  > i{color:var(--vd-c-video);}
        .vd-nav-i.tint-audio  > i{color:var(--vd-c-audio);}
        .vd-nav-i.tint-pdf    > i{color:var(--vd-c-pdf);}
        .vd-nav-i.tint-doc    > i{color:var(--vd-c-doc);}
        .vd-nav-i.tint-sheet  > i{color:var(--vd-c-sheet);}
        .vd-nav-i.tint-slide  > i{color:var(--vd-c-slide);}
        .vd-nav-i.tint-archive> i{color:var(--vd-c-archive);}
        .vd-nav-i.tint-code   > i{color:var(--vd-c-code);}
        .vd-nav-i.tint-text   > i{color:var(--vd-c-text);}
        .vd-nav-i.tint-other  > i{color:var(--vd-c-other);}
        .vd-nav-i.on.tint-image  > i,.vd-nav-i.on.tint-video > i,
        .vd-nav-i.on.tint-audio  > i,.vd-nav-i.on.tint-pdf   > i,
        .vd-nav-i.on.tint-doc    > i,.vd-nav-i.on.tint-sheet > i,
        .vd-nav-i.on.tint-slide  > i,.vd-nav-i.on.tint-archive>i,
        .vd-nav-i.on.tint-code   > i,.vd-nav-i.on.tint-text  > i,
        .vd-nav-i.on.tint-other  > i{color:var(--vd-acc-ink);}

        /* 저장공간 카드 */
        .vd-rail-foot{flex:none;}
        .vd-store{
            border:1px solid var(--vd-line);border-radius:var(--vd-r-card);
            background:var(--vd-card);padding:12px 13px 11px;box-shadow:var(--vd-sh);
        }
        .vd-store > header{display:flex;align-items:center;gap:7px;margin-bottom:9px;}
        .vd-store > header i{font-size:15px;color:var(--vd-sub);}
        .vd-store > header b{flex:1;font-size:12.5px;font-weight:650;color:var(--vd-ink);}
        .vd-store-re{
            width:24px;height:24px;border:0;border-radius:7px;background:transparent;
            color:var(--vd-sub);cursor:pointer;display:flex;align-items:center;justify-content:center;
            font-size:14px;transition:background .13s,color .13s;
        }
        .vd-store-re:hover{background:var(--vd-hover);color:var(--vd-ink2);}
        .vd-store-re.spin i{animation:vdSpin .9s linear infinite;}
        /* 저장 막대 — 분류마다 색 조각이 이어진다 */
        .vd-store-bar{
            position:relative;height:8px;border-radius:99px;overflow:hidden;
            background:var(--vd-field);display:flex;
        }
        .vd-store-bar i{display:block;height:100%;transition:width .4s cubic-bezier(.2,.8,.2,1);}
        .vd-store-txt{margin-top:9px;font-size:12px;color:var(--vd-ink2);font-weight:600;}
        .vd-store-txt em{font-style:normal;color:var(--vd-sub);font-weight:500;}
        .vd-store-disk{margin-top:3px;font-size:11px;color:var(--vd-sub);line-height:1.55;}
        .vd-store-disk b{color:var(--vd-ok);font-weight:650;}
        .vd-store-disk .tight b{color:var(--vd-warn);}
        .vd-store-disk .crit b{color:var(--vd-red);}
        /* 15.40 · .vd-store-more · .vd-store-bd · .vd-bd-row (레일 카드의 분류별
           펼치기)는 없앴다 — 분류별 사용량은 저장공간 상세 판 한 곳에서만 본다. */

        /* ── 2) 가운데 본문 ───────────────────────────────────────── */
        .vd-main{grid-column:2;display:flex;flex-direction:column;min-width:0;min-height:0;position:relative;}

        /* 상단줄 */
        .vd-top{
            flex:none;height:var(--vd-top-h);display:flex;align-items:center;gap:14px;
            padding:0 20px;border-bottom:1px solid var(--vd-hair);background:var(--vd-page);
        }
        .vd-title{
            font-size:19px;font-weight:700;letter-spacing:-.028em;color:var(--vd-ink);
            white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:none;max-width:26vw;
        }
        .vd-searchwrap{
            position:relative;flex:1 1 auto;min-width:120px;max-width:720px;margin:0 auto;
        }
        .vd-searchwrap > i{
            position:absolute;left:15px;top:50%;transform:translateY(-50%);
            font-size:16px;color:var(--vd-sub);pointer-events:none;transition:color .15s;
        }
        .vd-search{
            width:100%;height:44px;padding:0 40px 0 44px;border:1px solid transparent;
            border-radius:999px;background:var(--vd-field);color:var(--vd-ink);
            font-size:13.5px;font-family:inherit;outline:none;
            transition:background .16s,box-shadow .18s,border-color .16s;
        }
        .vd-search::placeholder{color:var(--vd-sub);}
        .vd-search:hover{background:color-mix(in srgb,var(--vd-field) 72%,var(--vd-card));}
        .vd-search:focus{
            background:var(--vd-card);border-color:transparent;
            box-shadow:0 1px 2px rgba(16,24,40,.06),0 4px 14px -6px rgba(16,24,40,.16);
        }
        .vd-search:focus + .vd-search-x{opacity:1;}
        .vd-searchwrap:focus-within > i{color:var(--vd-acc-ink);}
        .vd-search::-webkit-search-cancel-button{display:none;}
        .vd-search-x{
            position:absolute;right:8px;top:50%;transform:translateY(-50%);
            width:30px;height:30px;border:0;border-radius:999px;background:transparent;
            color:var(--vd-sub);cursor:pointer;font-size:16px;opacity:0;
            display:flex;align-items:center;justify-content:center;transition:opacity .15s,color .13s;
        }
        .vd-search-x:hover{color:var(--vd-ink2);}
        .vd-searchwrap.has-q .vd-search-x{opacity:1;}

        .vd-top-tools{display:flex;align-items:center;gap:6px;flex:none;margin-left:auto;}
        .vd-ic{
            width:38px;height:38px;border:0;border-radius:999px;background:transparent;
            color:var(--vd-ink2);cursor:pointer;display:flex;align-items:center;justify-content:center;
            font-size:18px;transition:background .13s,color .13s,transform .12s;
        }
        .vd-ic:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-ic:active{transform:scale(.94);}
        .vd-ic.on{background:var(--vd-on);color:var(--vd-acc-ink);}
        .vd-up{
            display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 16px;
            border:1px solid var(--vd-line);border-radius:999px;background:var(--vd-card);
            color:var(--vd-ink);font-size:13px;font-weight:600;cursor:pointer;box-shadow:var(--vd-sh);
            transition:box-shadow .16s,transform .12s,color .14s;
        }
        .vd-up i{font-size:17px;color:var(--vd-acc-ink);}
        .vd-up:hover{box-shadow:var(--vd-sh-lg);color:var(--vd-acc-ink);}
        .vd-up:active{transform:scale(.97);}

        /* 머리줄(개수 · 정렬 · 보기) */
        .vd-sub{
            flex:none;min-height:var(--vd-sub-h);display:flex;align-items:center;gap:12px;
            padding:6px 20px;border-bottom:1px solid var(--vd-hair);
        }
        .vd-sub-l{display:flex;align-items:center;gap:10px;min-width:0;font-size:12.5px;color:var(--vd-sub);}
        .vd-sub-l > span:first-child{font-variant-numeric:tabular-nums;}
        .vd-sub-sep{width:1px;height:13px;background:var(--vd-line);}
        .vd-linkbtn{
            border:0;background:transparent;padding:2px 4px;border-radius:6px;cursor:pointer;
            color:var(--vd-acc-ink);font-size:12.5px;font-weight:650;font-family:inherit;
        }
        .vd-linkbtn:hover{background:var(--vd-acc-soft);}
        .vd-sub-r{display:flex;align-items:center;gap:8px;margin-left:auto;}
        .vd-chip{
            display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 11px;
            border:1px solid var(--vd-line);border-radius:999px;background:var(--vd-card);
            color:var(--vd-ink2);font-size:12.5px;font-weight:600;cursor:pointer;
            transition:background .13s,border-color .13s,color .13s;
        }
        .vd-chip i{font-size:15px;color:var(--vd-sub);}
        .vd-chip:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-chip.open{background:var(--vd-on);border-color:transparent;color:var(--vd-acc-ink);}
        .vd-chip.open i{color:var(--vd-acc-ink);}
        .vd-viewtog{display:flex;align-items:center;gap:2px;padding:2px;border-radius:999px;background:var(--vd-field);}
        .vd-viewtog button{
            width:32px;height:28px;border:0;border-radius:999px;background:transparent;
            color:var(--vd-sub);cursor:pointer;display:flex;align-items:center;justify-content:center;
            font-size:16px;transition:background .14s,color .14s,box-shadow .14s;
        }
        .vd-viewtog button:hover{color:var(--vd-ink2);}
        .vd-viewtog button.on{background:var(--vd-card);color:var(--vd-acc-ink);box-shadow:var(--vd-sh);}

        /* 선택 막대 — 고른 게 있으면 머리줄 자리로 올라온다 */
        /* ── 25.1 · 상세 필터 판 (종류 · 기간 · 크기) ──────────────────
           드라이브의 '검색 옵션' 과 같은 자리 — 서브 막대 바로 아래에서
           내려온다. 조건은 칩으로 남고, 활성 개수는 필터 버튼 배지에 찍힌다. */
        .vd-filter{
            flex:none;
            padding:10px clamp(14px,2.2vw,26px) 12px;
            background:linear-gradient(180deg,var(--vd-bg-soft),var(--vd-card));
            border-bottom:1px solid var(--vd-hair);
            animation:vdFilterIn .18s ease-out;
        }
        @keyframes vdFilterIn{ from{opacity:0;transform:translateY(-6px);} to{opacity:1;transform:none;} }
        .vd-f-row{
            display:grid;grid-template-columns:52px minmax(0,1fr);
            align-items:start;gap:10px;padding:5px 0;
        }
        .vd-f-lab{
            font-size:11.5px;font-weight:700;letter-spacing:.02em;color:var(--vd-sub);
            padding-top:6px;
        }
        .vd-f-chips{display:flex;flex-wrap:wrap;gap:6px;}
        .vd-fchip{
            display:inline-flex;align-items:center;gap:5px;
            height:30px;padding:0 11px;border-radius:999px;
            border:1px solid var(--vd-hair);background:var(--vd-card);
            color:var(--vd-ink);font:inherit;font-size:12.5px;font-weight:600;
            cursor:pointer;white-space:nowrap;
            transition:background .14s,border-color .14s,color .14s,transform .1s;
        }
        .vd-fchip i{font-size:14px;color:var(--vd-sub);transition:color .14s;}
        .vd-fchip:hover{background:var(--vd-hover);border-color:var(--vd-line);}
        .vd-fchip:active{transform:scale(.97);}
        .vd-fchip.on{background:var(--vd-on);border-color:transparent;color:var(--vd-acc-ink);}
        .vd-fchip.on i{color:var(--vd-acc-ink);}
        .vd-fchip-soft{background:transparent;border-color:var(--vd-line);color:var(--vd-sub);}
        .vd-f-foot{
            display:flex;align-items:center;gap:12px;flex-wrap:wrap;
            margin-top:6px;padding-top:9px;border-top:1px dashed var(--vd-hair);
        }
        .vd-f-star{
            display:inline-flex;align-items:center;gap:6px;
            font-size:12.5px;font-weight:600;color:var(--vd-ink);cursor:pointer;
            user-select:none;
        }
        .vd-f-star input{width:16px;height:16px;accent-color:var(--vd-acc);cursor:pointer;}
        .vd-f-star i{font-size:14px;color:var(--vd-c-star,#f0a020);}
        .vd-f-count{margin-left:auto;font-size:12px;font-weight:700;color:var(--vd-sub);}
        .vd-chip-n{
            min-width:17px;height:17px;padding:0 5px;border-radius:999px;
            background:var(--vd-acc);color:var(--vd-acc-ink);
            font-size:10.5px;font-weight:800;line-height:17px;text-align:center;
        }

        .vd-selbar{
            flex:none;min-height:var(--vd-sub-h);display:flex;align-items:center;gap:14px;
            padding:6px 20px;border-bottom:1px solid var(--vd-hair);
            background:var(--vd-field);color:var(--vd-sub);
            transition:background .16s ease,border-color .16s ease,color .16s ease;
        }
        .vd-selbar.on{
            border-bottom-color:color-mix(in srgb,var(--vd-acc) 22%,var(--vd-hair));
            background:var(--vd-acc-soft);color:var(--vd-acc-ink);
        }
        .vd-selbar-n{font-size:13px;font-weight:700;color:var(--vd-sub);white-space:nowrap;font-variant-numeric:tabular-nums;transition:color .16s ease;}
        .vd-selbar.on .vd-selbar-n{color:var(--vd-acc-ink);}
        .vd-selbar-acts{display:flex;align-items:center;gap:4px;margin-left:auto;flex-wrap:wrap;justify-content:flex-end;}
        .vd-sb{
            display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 11px;
            border:0;border-radius:8px;background:transparent;color:var(--vd-sub);
            font-size:12.5px;font-weight:600;cursor:pointer;font-family:inherit;
            transition:background .13s,color .13s,opacity .13s;
        }
        .vd-sb[hidden],.vd-loadmore[hidden],.vd-q-ic[hidden]{display:none;}
        .vd-sb i{font-size:16px;}
        .vd-selbar.on .vd-sb:not(:disabled){color:var(--vd-acc-ink);}
        .vd-selbar.on .vd-sb:not(:disabled):hover{background:color-mix(in srgb,var(--vd-acc) 16%,transparent);}
        .vd-sb:disabled{color:var(--vd-sub);opacity:.48;cursor:default;}
        .vd-sb:disabled:hover{background:transparent;}
        .vd-selbar.on .vd-sb-del:not(:disabled){color:var(--vd-acc-ink);}
        .vd-selbar.on .vd-sb-del:not(:disabled):hover{background:color-mix(in srgb,var(--vd-red) 13%,transparent);color:var(--vd-red);}
        .vd-sb-x{width:32px;padding:0;justify-content:center;color:var(--vd-sub);}
        .vd-selbar.on .vd-sb-x:not(:disabled){color:var(--vd-acc-ink);}
        .vd-selbar.on .vd-sb-x:not(:disabled):hover{background:color-mix(in srgb,var(--vd-acc) 16%,transparent);color:var(--vd-ink);}

        /* ── 목록 · 그리드 구역 ───────────────────────────────────── */
        .vd-scroll{
            flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
            padding:0 12px 96px;scroll-behavior:auto;position:relative;
            scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--vd-sub) 40%,transparent) transparent;
        }
        .vd-scroll::-webkit-scrollbar{width:11px;}
        .vd-scroll::-webkit-scrollbar-thumb{
            background:color-mix(in srgb,var(--vd-sub) 34%,transparent);
            border:3px solid transparent;background-clip:content-box;border-radius:99px;
        }
        .vd-scroll::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--vd-sub) 58%,transparent);background-clip:content-box;}

        /* 목록 머리(컬럼 이름) */
        .vd-head{
            position:sticky;top:0;z-index:6;display:grid;align-items:center;
            grid-template-columns:44px minmax(0,1fr) 132px 96px 132px 44px;
            gap:8px;height:36px;padding:0 8px;margin:0 8px;
            background:var(--vd-page);border-bottom:1px solid var(--vd-hair);
            font-size:11.5px;font-weight:650;color:var(--vd-sub);letter-spacing:.01em;
        }
        .vd-head > span{display:flex;align-items:center;gap:5px;user-select:none;}
        .vd-head .c-name,.vd-head .c-size,.vd-head .c-date{cursor:pointer;border-radius:6px;padding:4px 6px;margin:-4px -6px;transition:background .13s,color .13s;}
        .vd-head .c-name:hover,.vd-head .c-size:hover,.vd-head .c-date:hover{background:var(--vd-hover);color:var(--vd-ink2);}
        .vd-head .c-name{padding-left:0;margin-left:0;}
        .vd-head .c-check{justify-content:center;}
        .vd-head .c-act{justify-content:flex-end;}
        .vd-head .sorted{color:var(--vd-acc-ink);}
        .vd-head .sorted i{font-size:14px;color:var(--vd-acc-ink);}
        .vd-list.grid{display:none;}
        .vd-list.rows{display:block;}
        .vd.grid-mode .vd-head{display:none;}
        .vd.grid-mode .vd-list.rows{display:none;}
        .vd.grid-mode .vd-list.grid{display:grid;}

        /* 체크박스 — 드라이브처럼 평상시엔 흐리게, hover/선택이면 또렷하게 */
        .vd-check{
            appearance:none;-webkit-appearance:none;width:17px;height:17px;flex:none;
            border:1.6px solid color-mix(in srgb,var(--vd-sub) 62%,transparent);border-radius:3px;
            background:var(--vd-card);cursor:pointer;position:relative;
            transition:background .12s,border-color .12s,opacity .12s;opacity:.62;
        }
        .vd-check:hover{border-color:var(--vd-acc);opacity:1;}
        .vd-check:checked{background:var(--vd-acc);border-color:var(--vd-acc);opacity:1;}
        .vd-check:checked::after{
            content:'';position:absolute;left:5px;top:1.5px;width:4px;height:9px;
            border:solid #fff;border-width:0 2px 2px 0;transform:rotate(42deg);
        }
        .vd-check:indeterminate{background:var(--vd-acc);border-color:var(--vd-acc);opacity:1;}
        .vd-check:indeterminate::after{
            content:'';position:absolute;left:3px;top:6.5px;width:9px;height:2px;background:#fff;border-radius:2px;
        }
        .vd-check:focus-visible{outline:2px solid var(--vd-acc);outline-offset:2px;}
        .vd-item:hover .vd-check,.vd-item.sel .vd-check,.vd-item:focus-within .vd-check{opacity:1;}
        .vd-touch .vd-check{opacity:1;}

        /* ── 목록 보기(줄) ─────────────────────────────────────────── */
        .vd-list.rows{display:flex;flex-direction:column;gap:1px;padding:4px 8px 0;}
        .vd-item{
            position:relative;display:grid;align-items:center;
            grid-template-columns:44px minmax(0,1fr) 132px 96px 132px 44px;
            gap:8px;height:var(--vd-row-h);padding:0 8px;border-radius:var(--vd-r-row);
            cursor:default;user-select:none;
            transition:background .11s,box-shadow .14s;
        }
        .vd-item:hover{background:var(--vd-hover);}
        .vd-item.sel{background:var(--vd-on);}
        .vd-item.sel:hover{background:color-mix(in srgb,var(--vd-acc) 15%,var(--vd-on));}
        .vd-item.cut{opacity:.42;}
        .vd-item.focus{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--vd-acc) 55%,transparent);}
        .vd-item.mark{animation:vdFlash 1.1s ease-out;}
        .vd-item .c-check{display:flex;justify-content:center;}
        .vd-item .c-name{display:flex;align-items:center;gap:11px;min-width:0;}
        .vd-item .c-kind,.vd-item .c-size,.vd-item .c-date{
            font-size:12px;color:var(--vd-sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
        }
        .vd-item .c-size{font-variant-numeric:tabular-nums;}
        .vd-item .c-date{font-variant-numeric:tabular-nums;}
        .vd-item.sel .c-kind,.vd-item.sel .c-size,.vd-item.sel .c-date{color:var(--vd-acc-ink);}
        .vd-item .c-act{display:flex;justify-content:flex-end;gap:2px;}
        .vd-nm{display:flex;flex-direction:column;min-width:0;gap:1px;}
        .vd-nm-t{
            font-size:13.5px;font-weight:550;color:var(--vd-ink);
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.014em;
        }
        .vd-item.sel .vd-nm-t{color:var(--vd-acc-ink);font-weight:650;}
        .vd-nm-s{font-size:11px;color:var(--vd-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        /* 목록 보기에서는 종류·크기·날짜가 제 컬럼에 있으므로 부제목은 숨긴다 */
        .vd-list.rows .vd-nm-s{display:none;}
        .vd-item .vd-mini{
            width:26px;height:26px;border-radius:7px;flex:none;position:relative;
            display:flex;align-items:center;justify-content:center;color:#fff;font-size:15px;
            overflow:hidden;box-shadow:0 1px 2px rgba(16,24,40,.14);
        }
        .vd-item .vd-mini img{width:100%;height:100%;object-fit:cover;display:block;background:var(--vd-field);}
        .vd-row-act{
            width:30px;height:30px;border:0;border-radius:999px;background:transparent;
            color:var(--vd-sub);cursor:pointer;font-size:16px;opacity:0;
            display:flex;align-items:center;justify-content:center;transition:opacity .12s,background .12s,color .12s;
        }
        .vd-item:hover .vd-row-act,.vd-item.sel .vd-row-act,.vd-item:focus-within .vd-row-act{opacity:1;}
        .vd-touch .vd-row-act{opacity:1;}
        .vd-row-act:hover{background:color-mix(in srgb,var(--vd-sub) 20%,transparent);color:var(--vd-ink);}
        .vd-star{
            width:28px;height:28px;border:0;border-radius:999px;background:transparent;
            color:color-mix(in srgb,var(--vd-sub) 70%,transparent);cursor:pointer;font-size:15px;
            display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .12s,color .13s,transform .16s;
        }
        .vd-item:hover .vd-star,.vd-item.sel .vd-star{opacity:1;}
        .vd-touch .vd-star{opacity:.55;}
        .vd-star:hover{color:var(--vd-warn);transform:scale(1.12);}
        .vd-star.on{opacity:1;color:var(--vd-warn);}
        .vd-star.on:hover{transform:none;}
        /* 이름 바꾸기 인라인 입력 */
        .vd-rename{
            width:100%;max-width:420px;height:30px;padding:0 8px;border-radius:7px;
            border:1.5px solid var(--vd-acc);background:var(--vd-card);color:var(--vd-ink);
            font-size:13.5px;font-family:inherit;outline:none;
            box-shadow:0 0 0 3px color-mix(in srgb,var(--vd-acc) 18%,transparent);
        }

        /* ── 아이콘 보기(타일) ────────────────────────────────────── */
        .vd-list.grid{
            grid-template-columns:repeat(auto-fill,minmax(188px,1fr));
            gap:14px;padding:14px 10px 0;
        }
        .vd.grid-mode .vd-list.grid{display:grid;}
        .vd-list.grid .vd-item{
            display:flex;flex-direction:column;align-items:stretch;height:auto;
            padding:0;border:1px solid var(--vd-line);border-radius:var(--vd-r-card);
            background:var(--vd-card);overflow:hidden;box-shadow:var(--vd-sh);
            transition:box-shadow .18s,transform .18s,border-color .16s,background .12s;
        }
        .vd-list.grid .vd-item:hover{
            box-shadow:var(--vd-sh-lg);transform:translateY(-2px);
            border-color:color-mix(in srgb,var(--vd-acc) 30%,var(--vd-line));background:var(--vd-card);
        }
        .vd-list.grid .vd-item.sel{
            border-color:var(--vd-acc);background:var(--vd-acc-soft);
            box-shadow:0 0 0 1px var(--vd-acc),var(--vd-sh-lg);transform:none;
        }
        .vd-list.grid .vd-tile{
            position:relative;height:118px;background:var(--vd-field);
            display:flex;align-items:center;justify-content:center;overflow:hidden;
        }
        .vd-list.grid .vd-tile img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s ease;}
        .vd-list.grid .vd-item:hover .vd-tile img{transform:scale(1.035);}
        .vd-list.grid .vd-tile .vd-big{
            width:56px;height:56px;border-radius:14px;color:#fff;font-size:28px;
            display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px rgba(16,24,40,.18);
        }
        .vd-list.grid .vd-tile-tools{
            position:absolute;inset:0 0 auto 0;display:flex;align-items:center;
            justify-content:space-between;padding:7px 8px;
            opacity:0;transition:opacity .14s;
        }
        .vd-list.grid .vd-item:hover .vd-tile-tools,
        .vd-list.grid .vd-item.sel .vd-tile-tools,
        .vd-list.grid .vd-item:focus-within .vd-tile-tools{opacity:1;}
        .vd-touch .vd-list.grid .vd-tile-tools{opacity:1;}
        .vd-list.grid .vd-tile-tools .vd-check,
        .vd-list.grid .vd-tile-tools .vd-row-act{
            background:color-mix(in srgb,var(--vd-card) 88%,transparent);
            box-shadow:0 1px 4px rgba(16,24,40,.2);opacity:1;
        }
        .vd-list.grid .vd-tile-tools .vd-row-act{width:26px;height:26px;font-size:15px;color:var(--vd-ink2);}
        .vd-list.grid .vd-tile-foot{padding:9px 11px 10px;display:flex;flex-direction:column;gap:3px;}
        .vd-list.grid .vd-nm-t{font-size:12.8px;line-height:1.35;white-space:normal;
            display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
        .vd-list.grid .vd-nm-s{font-size:11px;}
        .vd-tile-badge{
            position:absolute;left:8px;bottom:8px;padding:2px 7px;border-radius:999px;
            background:rgba(16,18,24,.62);color:#fff;font-size:10.5px;font-weight:650;
            backdrop-filter:blur(4px);letter-spacing:.01em;
        }
        .vd-tile-star{
            position:absolute;right:8px;bottom:8px;font-size:15px;color:#fff;
            filter:drop-shadow(0 1px 2px rgba(0,0,0,.5));
        }

        /* 파일 종류 색 — 미니/큰 아이콘 배경 */
        .vd-c-image  {background:var(--vd-c-image);}
        .vd-c-video  {background:var(--vd-c-video);}
        .vd-c-audio  {background:var(--vd-c-audio);}
        .vd-c-pdf    {background:var(--vd-c-pdf);}
        .vd-c-doc    {background:var(--vd-c-doc);}
        .vd-c-sheet  {background:var(--vd-c-sheet);}
        .vd-c-slide  {background:var(--vd-c-slide);}
        .vd-c-archive{background:var(--vd-c-archive);}
        .vd-c-code   {background:var(--vd-c-code);}
        .vd-c-text   {background:var(--vd-c-text);}
        .vd-c-other  {background:var(--vd-c-other);}

        /* ── 고무줄(드래그) 선택 ──────────────────────────────────── */
        .vd-marquee{
            position:fixed;z-index:8;border:1px solid var(--vd-acc);
            background:color-mix(in srgb,var(--vd-acc) 13%,transparent);
            border-radius:4px;pointer-events:none;
        }
        .vd.scroll-selecting{user-select:none;}
        .vd.scroll-selecting .vd-scroll{cursor:crosshair;}

        /* ── 3) 오른쪽 세부정보 ───────────────────────────────────── */
        .vd-detail{
            grid-column:3;min-width:0;overflow:hidden auto;overscroll-behavior:contain;
            background:var(--vd-card);border-left:1px solid var(--vd-hair);
            display:flex;flex-direction:column;scrollbar-width:thin;
        }
        .vd-detail[hidden]{display:none;}
        .vd-dt-head{
            flex:none;display:flex;align-items:center;gap:8px;height:52px;padding:0 12px 0 18px;
            border-bottom:1px solid var(--vd-hair);
        }
        .vd-dt-head b{flex:1;font-size:13px;font-weight:650;color:var(--vd-ink);}
        .vd-dt-hero{
            flex:none;height:196px;margin:16px 16px 0;border-radius:var(--vd-r-card);
            background:var(--vd-field);border:1px solid var(--vd-hair);
            display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative;
        }
        .vd-dt-hero img{width:100%;height:100%;object-fit:contain;display:block;background:var(--vd-field);}
        .vd-dt-hero video{width:100%;height:100%;object-fit:contain;background:#0B0C0F;}
        .vd-dt-hero .vd-big{
            width:70px;height:70px;border-radius:18px;color:#fff;font-size:34px;
            display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px rgba(16,24,40,.2);
        }
        .vd-dt-hero .vd-hero-open{
            position:absolute;inset:auto 8px 8px auto;display:inline-flex;align-items:center;gap:5px;
            height:30px;padding:0 11px;border:0;border-radius:999px;cursor:pointer;
            background:rgba(16,18,24,.66);color:#fff;font-size:11.5px;font-weight:650;
            backdrop-filter:blur(4px);transition:background .14s;
        }
        .vd-dt-hero .vd-hero-open:hover{background:rgba(16,18,24,.84);}
        .vd-dt-name{
            margin:14px 16px 0;font-size:15.5px;font-weight:700;color:var(--vd-ink);
            line-height:1.4;word-break:break-all;letter-spacing:-.02em;
        }
        .vd-dt-kind{margin:3px 16px 0;font-size:12px;color:var(--vd-sub);}
        .vd-dt-acts{display:flex;flex-wrap:wrap;gap:7px;padding:14px 16px 4px;}
        .vd-dt-act{
            display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;
            border:1px solid var(--vd-line);border-radius:999px;background:var(--vd-card);
            color:var(--vd-ink2);font-size:12.5px;font-weight:600;cursor:pointer;
            transition:background .13s,color .13s,border-color .13s;
        }
        .vd-dt-act i{font-size:15px;}
        .vd-dt-act:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-dt-act.primary{background:var(--vd-acc);border-color:transparent;color:#fff;}
        .vd-dt-act.primary:hover{background:color-mix(in srgb,var(--vd-acc) 88%,#000);color:#fff;}
        .vd-dt-act.danger:hover{background:color-mix(in srgb,var(--vd-red) 12%,transparent);color:var(--vd-red);border-color:color-mix(in srgb,var(--vd-red) 34%,var(--vd-line));}
        .vd-dt-meta{padding:14px 16px 20px;display:flex;flex-direction:column;gap:0;}
        .vd-dt-row{
            display:grid;grid-template-columns:88px minmax(0,1fr);gap:10px;
            padding:9px 0;border-top:1px solid var(--vd-hair);font-size:12.5px;
        }
        .vd-dt-row dt{color:var(--vd-sub);font-weight:550;}
        .vd-dt-row dd{color:var(--vd-ink2);word-break:break-all;font-variant-numeric:tabular-nums;}
        .vd-dt-row dd.copyable{cursor:pointer;border-radius:5px;}
        .vd-dt-row dd.copyable:hover{color:var(--vd-acc-ink);background:var(--vd-acc-soft);}
        .vd-dt-empty{
            flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
            gap:10px;padding:40px 26px;color:var(--vd-sub);text-align:center;
        }
        .vd-dt-empty i{font-size:40px;opacity:.3;}
        .vd-dt-empty p{font-size:12.5px;line-height:1.6;}
        .vd-dt-multi{padding:16px;}
        .vd-dt-multi .vd-dt-hero{margin:0 0 14px;height:150px;}
        .vd-dt-stack{display:flex;flex-direction:column;gap:6px;max-height:230px;overflow:auto;}
        .vd-dt-stack .it{
            display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:9px;
            background:var(--vd-field);font-size:12px;color:var(--vd-ink2);
        }
        .vd-dt-stack .it i{font-size:15px;}
        .vd-dt-stack .it span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .vd-dt-stack .it em{font-style:normal;color:var(--vd-sub);font-variant-numeric:tabular-nums;}

        /* ── 빈 화면 · 스켈레톤(로딩) ─────────────────────────────── */
        .vd-empty{
            display:flex;flex-direction:column;align-items:center;justify-content:center;
            gap:12px;padding:78px 20px;color:var(--vd-sub);text-align:center;
        }
        .vd-empty .vd-empty-ico{
            width:82px;height:82px;border-radius:26px;background:var(--vd-field);
            display:flex;align-items:center;justify-content:center;font-size:36px;
            color:color-mix(in srgb,var(--vd-sub) 78%,transparent);border:1px solid var(--vd-hair);
        }
        .vd-empty b{font-size:15px;color:var(--vd-ink);font-weight:650;letter-spacing:-.02em;}
        .vd-empty p{font-size:12.5px;line-height:1.65;max-width:420px;}
        .vd-empty button{
            display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 16px;margin-top:2px;
            border:1px solid var(--vd-line);border-radius:999px;background:var(--vd-card);
            color:var(--vd-acc-ink);font-size:12.5px;font-weight:650;cursor:pointer;box-shadow:var(--vd-sh);
            transition:box-shadow .16s,transform .12s;
        }
        .vd-empty button:hover{box-shadow:var(--vd-sh-lg);}
        .vd-empty button:active{transform:scale(.98);}
        /* 로딩 스켈레톤 — 목록이 오기 전 자리를 먼저 잡아 둔다(깜빡임 없음) */
        .vd-skel{display:flex;flex-direction:column;gap:2px;padding:6px 8px 0;}
        .vd-skel-row{
            display:grid;grid-template-columns:44px minmax(0,1fr) 132px 96px 132px 44px;
            align-items:center;gap:8px;height:var(--vd-row-h);padding:0 8px;
        }
        .vd-skel i{
            display:block;height:12px;border-radius:6px;
            background:linear-gradient(90deg,var(--vd-field) 0%,var(--vd-hover) 42%,var(--vd-field) 84%);
            background-size:340% 100%;animation:vdShimmer 1.25s linear infinite;
        }
        .vd-skel i.sq{width:26px;height:26px;border-radius:7px;}
        .vd-skel-row i:nth-child(2){width:min(46%,360px);}
        .vd-skel-row i:nth-child(3){width:64px;}
        .vd-skel-row i:nth-child(4){width:44px;}
        .vd-skel-row i:nth-child(5){width:76px;}
        .vd-skel-row i:nth-child(6){width:18px;height:18px;border-radius:99px;}
        .vd.grid-mode .vd-skel{
            display:grid;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));gap:14px;padding:14px 10px 0;
        }
        .vd.grid-mode .vd-skel-row{
            display:block;height:168px;border:1px solid var(--vd-line);border-radius:var(--vd-r-card);
            background:var(--vd-card);overflow:hidden;padding:0;
        }
        .vd.grid-mode .vd-skel-row i{
            width:100%;height:118px;border-radius:0;
            background:linear-gradient(90deg,var(--vd-field) 0%,var(--vd-hover) 42%,var(--vd-field) 84%);
            background-size:340% 100%;animation:vdShimmer 1.25s linear infinite;
        }
        .vd.grid-mode .vd-skel-row i:nth-child(2){width:70%;height:12px;margin:12px 12px 0;}
        .vd.grid-mode .vd-skel-row i:nth-child(n+3){display:none;}
        .vd-loadmore{display:flex;justify-content:center;padding:18px 0 4px;}
        .vd-loadmore button{
            height:36px;padding:0 20px;border:1px solid var(--vd-line);border-radius:999px;
            background:var(--vd-card);color:var(--vd-ink2);font-size:12.5px;font-weight:650;
            cursor:pointer;box-shadow:var(--vd-sh);transition:box-shadow .16s;
        }
        .vd-loadmore button:hover{box-shadow:var(--vd-sh-lg);}

        /* ── 끌어다 놓기 ──────────────────────────────────────────── */
        .vd-dropzone{
            position:fixed;inset:0;z-index:1600;display:flex;align-items:center;justify-content:center;
            background:color-mix(in srgb,var(--vd-acc) 10%,rgba(12,14,20,.44));
            backdrop-filter:blur(3px);animation:vdFade .16s ease;
        }
        /* hidden 속성이 display:flex 에 덮여 오버레이가 상시 떠서 클릭을 막던 문제 */
        .vd-dropzone[hidden]{display:none;}
        .vd-dropcard{
            display:flex;flex-direction:column;align-items:center;gap:9px;
            padding:38px 54px;border-radius:24px;border:2.5px dashed var(--vd-acc);
            background:var(--vd-card);box-shadow:var(--vd-sh-lg);text-align:center;
            animation:vdPop .2s cubic-bezier(.2,.9,.2,1);
        }
        .vd-dropcard i{font-size:44px;color:var(--vd-acc-ink);}
        .vd-dropcard b{font-size:16px;color:var(--vd-ink);letter-spacing:-.02em;}
        .vd-dropcard span{font-size:12.5px;color:var(--vd-sub);}

        /* ── 올리기 대기열 (오른쪽 아래) ─────────────────────────── */
        .vd-queue{
            position:fixed;right:20px;bottom:20px;z-index:1700;width:368px;max-width:calc(100vw - 24px);
            border:1px solid var(--vd-line);border-radius:var(--vd-r-card);background:var(--vd-card);
            box-shadow:0 18px 44px -14px rgba(16,24,40,.34),0 2px 6px rgba(16,24,40,.08);
            overflow:hidden;animation:vdQueueIn .26s cubic-bezier(.2,.8,.2,1);
        }
        .vd-queue.fold .vd-q-list,.vd-queue.fold .vd-q-track{display:none;}
        .vd-queue > header{
            display:flex;align-items:center;gap:8px;height:46px;padding:0 8px 0 15px;
            border-bottom:1px solid var(--vd-hair);
        }
        .vd-queue > header b{font-size:13px;font-weight:650;color:var(--vd-ink);}
        .vd-queue > header span{flex:1;font-size:11.5px;color:var(--vd-sub);font-variant-numeric:tabular-nums;
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .vd-q-ic{
            width:30px;height:30px;border:0;border-radius:999px;background:transparent;
            color:var(--vd-sub);cursor:pointer;font-size:16px;
            display:flex;align-items:center;justify-content:center;transition:background .13s,color .13s;
        }
        .vd-q-ic:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-q-track{height:4px;background:var(--vd-field);}
        .vd-q-track i{
            display:block;height:100%;width:0;border-radius:0 99px 99px 0;
            background:linear-gradient(90deg,var(--vd-acc),var(--nf-violet-hi,#B8A4EC));
            transition:width .24s ease;
        }
        .vd-queue.done .vd-q-track i{background:linear-gradient(90deg,var(--vd-ok),#4ED0B4);}
        .vd-queue.bad .vd-q-track i{background:linear-gradient(90deg,var(--vd-red),#FF9A8B);}
        .vd-q-list{max-height:264px;overflow-y:auto;overscroll-behavior:contain;padding:6px 8px 8px;scrollbar-width:thin;}
        .vd-q-item{display:grid;grid-template-columns:30px minmax(0,1fr) 42px 26px;align-items:center;gap:9px;padding:7px 6px;border-radius:10px;}
        .vd-q-item:hover{background:var(--vd-hover);}
        .vd-q-item .qi{
            width:30px;height:30px;border-radius:8px;color:#fff;font-size:15px;
            display:flex;align-items:center;justify-content:center;
        }
        .vd-q-item .qn{display:flex;flex-direction:column;gap:4px;min-width:0;}
        .vd-q-item .qn b{
            font-size:12.3px;font-weight:550;color:var(--vd-ink);
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
        }
        .vd-q-item .qn .qbar{height:4px;border-radius:99px;background:var(--vd-field);overflow:hidden;}
        .vd-q-item .qn .qbar i{
            display:block;height:100%;width:0;border-radius:99px;background:var(--vd-acc);
            transition:width .18s ease;
        }
        .vd-q-item.ok .qn .qbar i{background:var(--vd-ok);}
        .vd-q-item.bad .qn .qbar i{background:var(--vd-red);}
        .vd-q-item .qp{font-size:11px;color:var(--vd-sub);text-align:right;font-variant-numeric:tabular-nums;}
        .vd-q-item.ok .qp{color:var(--vd-ok);}
        .vd-q-item.bad .qp{color:var(--vd-red);}
        .vd-q-item .qx{
            width:26px;height:26px;border:0;border-radius:999px;background:transparent;color:var(--vd-sub);
            cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;
        }
        .vd-q-item .qx:hover{background:color-mix(in srgb,var(--vd-red) 14%,transparent);color:var(--vd-red);}
        .vd-q-item .qsub{font-size:10.5px;color:var(--vd-faint);}

        /* ── 미리보기 ─────────────────────────────────────────────── */
        .vd-preview{
            position:fixed;inset:0;z-index:2400;display:flex;flex-direction:column;
            background:rgba(10,11,15,.965);color:#EDEEF2;
            animation:vdFade .18s ease;
        }
        .vd-preview[hidden]{display:none;}
        .vd-pv-top{
            flex:none;display:flex;align-items:center;gap:12px;height:56px;padding:0 12px 0 18px;
            border-bottom:1px solid rgba(255,255,255,.09);
        }
        .vd-pv-name{
            font-size:14px;font-weight:650;color:#fff;letter-spacing:-.015em;
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:44vw;
        }
        .vd-pv-meta{flex:1;font-size:11.5px;color:rgba(237,238,242,.62);
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .vd-pv-tools{display:flex;align-items:center;gap:2px;flex:none;}
        .vd-pv-tools .vd-ic{color:rgba(237,238,242,.82);}
        .vd-pv-tools .vd-ic:hover{background:rgba(255,255,255,.11);color:#fff;}
        .vd-pv-zoom{
            min-width:52px;text-align:center;font-size:11.5px;color:rgba(237,238,242,.78);
            font-variant-numeric:tabular-nums;
        }
        .vd-pv-sep{width:1px;height:20px;background:rgba(255,255,255,.14);margin:0 6px;}
        .vd-pv-stage{
            flex:1 1 auto;min-height:0;position:relative;overflow:hidden;
            display:flex;align-items:center;justify-content:center;
        }
        .vd-pv-stage.zoomable{cursor:grab;}
        .vd-pv-stage.grabbing{cursor:grabbing;}
        .vd-pv-frame{
            position:relative;max-width:100%;max-height:100%;
            display:flex;align-items:center;justify-content:center;
            transition:transform .18s cubic-bezier(.2,.8,.2,1);will-change:transform;
        }
        .vd-pv-frame img{
            max-width:min(94vw,1600px);max-height:calc(100dvh - 148px);object-fit:contain;
            display:block;border-radius:4px;box-shadow:0 24px 60px -18px rgba(0,0,0,.8);
            background:var(--vd-card);
        }
        .vd-pv-frame video{
            max-width:min(94vw,1400px);max-height:calc(100dvh - 148px);
            display:block;border-radius:8px;background:#000;box-shadow:0 24px 60px -18px rgba(0,0,0,.8);
        }
        .vd-pv-frame audio{width:min(560px,88vw);}
        .vd-pv-frame iframe{
            width:min(96vw,1180px);height:calc(100dvh - 140px);border:0;border-radius:8px;
            background:#fff;box-shadow:0 24px 60px -18px rgba(0,0,0,.8);
        }
        .vd-pv-audio{
            display:flex;flex-direction:column;align-items:center;gap:18px;padding:20px;
        }
        .vd-pv-audio .art{
            width:196px;height:196px;border-radius:22px;color:#fff;font-size:70px;
            display:flex;align-items:center;justify-content:center;
            box-shadow:0 24px 60px -18px rgba(0,0,0,.75);
        }
        /* 글자 파일 — 줄번호 + 단순 강조 */
        .vd-pv-text{
            width:min(1080px,96vw);height:calc(100dvh - 140px);overflow:auto;
            background:#14161B;border:1px solid rgba(255,255,255,.09);border-radius:10px;
            font-family:'Roboto Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
            font-size:12.6px;line-height:1.62;color:#DCE0E8;scrollbar-width:thin;
        }
        .vd-pv-text table{border-collapse:collapse;width:100%;}
        .vd-pv-text td{padding:0;vertical-align:top;}
        .vd-pv-text td.ln{
            width:1%;min-width:52px;padding:0 12px 0 14px;text-align:right;
            color:rgba(220,224,232,.3);user-select:none;white-space:nowrap;
            border-right:1px solid rgba(255,255,255,.07);position:sticky;left:0;background:#14161B;
        }
        .vd-pv-text td.cd{padding:0 16px;white-space:pre;max-width:0;overflow:hidden;text-overflow:ellipsis;}
        .vd-pv-text tr:hover td.cd{background:rgba(255,255,255,.035);}
        .vd-pv-text .t-str{color:#9BE29B;}
        .vd-pv-text .t-num{color:#FFC46B;}
        .vd-pv-text .t-key{color:#8FB8FF;}
        .vd-pv-text .t-com{color:rgba(220,224,232,.42);font-style:italic;}
        .vd-pv-text .t-tag{color:#F0A6CA;}
        .vd-pv-unable{
            display:flex;flex-direction:column;align-items:center;gap:12px;padding:36px;text-align:center;
        }
        .vd-pv-unable .ico{
            width:96px;height:96px;border-radius:26px;color:#fff;font-size:44px;
            display:flex;align-items:center;justify-content:center;
        }
        .vd-pv-unable b{font-size:15px;color:#fff;font-weight:650;}
        .vd-pv-unable p{font-size:12.5px;color:rgba(237,238,242,.62);max-width:420px;line-height:1.6;}
        .vd-pv-unable button{
            display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 18px;
            border:1px solid rgba(255,255,255,.2);border-radius:999px;background:rgba(255,255,255,.08);
            color:#fff;font-size:13px;font-weight:650;cursor:pointer;transition:background .14s;
        }
        .vd-pv-unable button:hover{background:rgba(255,255,255,.16);}
        .vd-pv-nav{
            position:absolute;top:50%;transform:translateY(-50%);z-index:3;
            width:46px;height:46px;border:0;border-radius:999px;cursor:pointer;
            background:rgba(255,255,255,.09);color:#fff;font-size:24px;
            display:flex;align-items:center;justify-content:center;
            transition:background .14s,transform .14s,opacity .14s;
        }
        .vd-pv-nav:hover{background:rgba(255,255,255,.2);}
        .vd-pv-nav:active{transform:translateY(-50%) scale(.94);}
        .vd-pv-nav.prev{left:14px;}
        .vd-pv-nav.next{right:14px;}
        .vd-pv-nav[disabled]{opacity:.24;cursor:default;}
        .vd-pv-nav[disabled]:hover{background:rgba(255,255,255,.09);}
        .vd-pv-foot{
            flex:none;min-height:44px;display:flex;align-items:center;justify-content:center;gap:14px;
            padding:8px 16px;border-top:1px solid rgba(255,255,255,.09);
            font-size:11.5px;color:rgba(237,238,242,.6);
        }
        .vd-pv-foot kbd{
            padding:1px 6px;border-radius:5px;background:rgba(255,255,255,.1);
            border:1px solid rgba(255,255,255,.14);font-size:10.5px;font-family:inherit;color:#EDEEF2;
        }
        .vd-pv-spin{
            position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
            color:rgba(255,255,255,.7);font-size:26px;
        }
        .vd-pv-spin i{animation:vdSpin .9s linear infinite;}

        /* ── 메뉴 · 대화상자 ──────────────────────────────────────── */
        .vd-menu{
            position:fixed;z-index:2100;min-width:216px;padding:6px;
            border:1px solid var(--vd-line);border-radius:12px;
            /* 살짝 비치는 유리는 남기되, 뒤 내용이 읽히지 않을 만큼만 —
               카드색 92% 로 채우고 뒤를 흐려서 어떤 배경 위에서도 또렷하다
               (15.41.3 · 너무 투명하다는 지적: 0% → 92%) */
            background:color-mix(in srgb,var(--vd-card,#FFFFFF) 92%,transparent);
            -webkit-backdrop-filter:blur(18px) saturate(140%);
            backdrop-filter:blur(18px) saturate(140%);
            box-shadow:0 18px 42px -12px rgba(16,24,40,.34),0 2px 6px rgba(16,24,40,.08);
            animation:vdPop .13s cubic-bezier(.2,.9,.2,1);
        }
        .vd-menu[hidden]{display:none;}
        .vd-menu-h{
            padding:7px 10px 5px;font-size:10.5px;font-weight:700;letter-spacing:.07em;
            text-transform:uppercase;color:var(--vd-faint);
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
        }
        .vd-menu-i{
            display:flex;align-items:center;gap:11px;width:100%;height:35px;padding:0 10px;
            border:0;border-radius:8px;background:transparent;color:var(--vd-ink2);
            font-size:13px;font-weight:550;cursor:pointer;text-align:left;font-family:inherit;
            transition:background .11s,color .11s;
        }
        .vd-menu-i > i{font-size:16px;color:var(--vd-sub);flex:none;transition:color .11s;}
        .vd-menu-i > span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .vd-menu-i em{font-style:normal;font-size:11px;color:var(--vd-faint);font-variant-numeric:tabular-nums;}
        .vd-menu-i:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-menu-i:hover > i{color:var(--vd-ink2);}
        .vd-menu-i.on{color:var(--vd-acc-ink);background:var(--vd-on);}
        .vd-menu-i.on > i{color:var(--vd-acc-ink);}
        .vd-menu-i.danger{color:var(--vd-red);}
        .vd-menu-i.danger > i{color:var(--vd-red);}
        .vd-menu-i.danger:hover{background:color-mix(in srgb,var(--vd-red) 11%,transparent);}
        .vd-menu-i[disabled]{opacity:.4;cursor:default;}
        .vd-menu-i[disabled]:hover{background:transparent;color:var(--vd-ink2);}
        .vd-menu-sep{height:1px;margin:5px 8px;background:var(--vd-hair);}

        .vd-dialog{
            position:fixed;inset:0;z-index:2600;display:flex;align-items:center;justify-content:center;
            padding:20px;background:rgba(12,14,20,.44);backdrop-filter:blur(4px);
            animation:vdFade .14s ease;
        }
        .vd-dialog[hidden]{display:none;}
        .vd-dlg-box{
            width:min(430px,100%);padding:22px 22px 18px;border-radius:20px;
            border:1px solid var(--vd-line);background:var(--vd-card);box-shadow:var(--vd-sh-lg);
            animation:vdPop .2s cubic-bezier(.2,.9,.2,1);
        }
        .vd-dlg-box h3{font-size:16px;font-weight:700;color:var(--vd-ink);letter-spacing:-.02em;}
        .vd-dlg-box p{margin-top:7px;font-size:12.5px;color:var(--vd-sub);line-height:1.6;word-break:break-all;}
        .vd-dlg-box input{
            width:100%;height:42px;margin-top:14px;padding:0 12px;border-radius:10px;
            border:1.5px solid var(--vd-line);background:var(--vd-field);color:var(--vd-ink);
            font-size:13.5px;font-family:inherit;outline:none;transition:border-color .14s,background .14s,box-shadow .14s;
        }
        .vd-dlg-box input:focus{
            border-color:var(--vd-acc);background:var(--vd-card);
            box-shadow:0 0 0 3px color-mix(in srgb,var(--vd-acc) 18%,transparent);
        }
        .vd-dlg-hint{margin-top:7px;font-size:11.5px;color:var(--vd-sub);min-height:16px;}
        .vd-dlg-hint.warn{color:var(--vd-warn);}
        .vd-dlg-hint.bad{color:var(--vd-red);}
        .vd-dlg-acts{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;}
        .vd-dlg-btn{
            height:38px;padding:0 17px;border-radius:999px;border:1px solid var(--vd-line);
            background:var(--vd-card);color:var(--vd-ink2);font-size:13px;font-weight:650;
            cursor:pointer;font-family:inherit;transition:background .13s,color .13s,box-shadow .14s;
        }
        .vd-dlg-btn:hover{background:var(--vd-hover);color:var(--vd-ink);}
        .vd-dlg-btn.primary{background:var(--vd-acc);border-color:transparent;color:#fff;}
        .vd-dlg-btn.primary:hover{background:color-mix(in srgb,var(--vd-acc) 88%,#000);color:#fff;}
        .vd-dlg-btn.danger{background:var(--vd-red);border-color:transparent;color:#fff;}
        .vd-dlg-btn.danger:hover{background:color-mix(in srgb,var(--vd-red) 88%,#000);color:#fff;}

        /* ═══ 25.1 · 미디어 조작대 (동영상 · 소리) ═══════════════════
           브라우저 기본 조작대 대신 그린다 — 구간 막대에 버퍼된 범위를
           같이 보여 주고, 배속·전체 화면·내려받기를 한 줄에 모은다. */
        .vd-mctl{
            flex:none;display:flex;align-items:center;gap:8px;
            padding:8px 14px;margin:10px auto 0;width:min(940px,100%);
            background:rgba(18,20,26,.92);border:1px solid rgba(255,255,255,.1);
            border-radius:14px;backdrop-filter:blur(8px);
            animation:vdPop .18s ease-out;
        }
        .vd-mb{
            display:inline-flex;align-items:center;justify-content:center;gap:6px;
            min-width:36px;height:36px;padding:0 9px;flex:none;
            border:0;border-radius:10px;background:transparent;
            color:#eef1f6;font:inherit;font-size:12.5px;font-weight:700;
            cursor:pointer;transition:background .14s,transform .1s;
        }
        .vd-mb i{font-size:19px;line-height:1;}
        .vd-mb:hover{background:rgba(255,255,255,.13);}
        .vd-mb:active{transform:scale(.94);}
        .vd-mb-play{min-width:44px;height:44px;background:rgba(255,255,255,.14);}
        .vd-mb-play i{font-size:25px;}
        .vd-mb.on{background:var(--vd-acc);color:#fff;}
        .vd-mb-rate{min-width:52px;}
        .vd-msep{width:1px;height:20px;background:rgba(255,255,255,.16);flex:none;margin:0 2px;}
        .vd-mtime{
            flex:none;font-size:12px;font-weight:700;color:#cfd5e0;
            font-variant-numeric:tabular-nums;letter-spacing:.01em;
        }
        .vd-mtime i{opacity:.5;font-style:normal;margin:0 4px;}
        .vd-mtime b{color:#fff;font-weight:800;}
        .vd-mseek{
            position:relative;flex:1 1 auto;height:22px;min-width:80px;
            display:flex;align-items:center;cursor:pointer;touch-action:none;
        }
        .vd-mseek i{
            position:absolute;left:0;height:5px;border-radius:999px;
            background:rgba(255,255,255,.2);width:100%;pointer-events:none;
        }
        .vd-mseek .vd-mbuf{background:rgba(255,255,255,.34);width:0;}
        .vd-mseek .vd-mfill{background:var(--vd-acc);width:0;}
        .vd-mseek .vd-mknob{
            width:13px;height:13px;left:0;border-radius:50%;background:#fff;
            box-shadow:0 1px 4px rgba(0,0,0,.5);transform:translateX(-50%) scale(0);
            transition:transform .14s;
        }
        .vd-mseek:hover .vd-mknob,.vd-mseek:focus-visible .vd-mknob{transform:translateX(-50%) scale(1);}
        .vd-mvol{
            flex:none;width:82px;height:22px;accent-color:var(--vd-acc);
            cursor:pointer;background:transparent;
        }
        /* 사진 도구 — 회전 · 뒤집기 · 슬라이드쇼 */
        .vd-pv-imgtools{
            flex:none;display:flex;align-items:center;justify-content:center;gap:6px;
            padding:6px 10px;margin:10px auto 0;width:max-content;max-width:100%;
            background:rgba(18,20,26,.9);border:1px solid rgba(255,255,255,.1);
            border-radius:12px;animation:vdPop .18s ease-out;
        }
        .vd-mb-slide span{font-size:12px;}
        .vd-slide-prog{display:none;width:64px;height:4px;border-radius:999px;background:rgba(255,255,255,.18);overflow:hidden;}
        .vd-slide-prog.run{display:block;}
        .vd-slide-prog i{display:block;height:100%;width:100%;background:var(--vd-acc);transform-origin:left;animation:vdSlideProg 5s linear infinite;}
        @keyframes vdSlideProg{from{transform:scaleX(0);}to{transform:scaleX(1);}}
        #vdPvStage img.turned{object-fit:contain;}

        /* ═══ 25.1 · 저장공간 상세 판 ═══════════════════════════════ */
        .vd-sto,.vd-help{position:absolute;inset:0;z-index:2500;display:flex;align-items:center;justify-content:center;}
        .vd-sto[hidden],.vd-help[hidden]{display:none;}
        .vd-sto-scrim,.vd-help-scrim{position:absolute;inset:0;background:rgba(12,14,20,.52);animation:vdFade .16s ease;}
        .vd-sto-box,.vd-help-box{
            position:relative;display:flex;flex-direction:column;
            width:min(680px,94vw);max-height:min(84dvh,760px);
            background:var(--vd-card);border:1px solid var(--vd-line);
            border-radius:18px;box-shadow:0 26px 70px -20px rgba(10,14,24,.55);
            animation:vdPop .2s cubic-bezier(.2,.8,.2,1);overflow:hidden;
        }
        .vd-sto-box>header,.vd-help-box>header{
            flex:none;display:flex;align-items:center;gap:10px;
            padding:14px 16px;border-bottom:1px solid var(--vd-hair);
        }
        .vd-sto-box>header h3,.vd-help-box>header h3{
            display:flex;align-items:center;gap:8px;margin:0;
            font-size:15.5px;font-weight:800;color:var(--vd-ink);letter-spacing:-.01em;
        }
        .vd-sto-box>header h3 i,.vd-help-box>header h3 i{font-size:18px;color:var(--vd-acc);}
        .vd-sto-box>header .vd-ic,.vd-help-box>header .vd-ic{margin-left:auto;}
        .vd-sto-body,.vd-help-body{
            flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;
            padding:14px 16px 20px;display:flex;flex-direction:column;gap:14px;
        }
        .vd-sto-card{
            padding:14px;border:1px solid var(--vd-hair);border-radius:14px;
            background:linear-gradient(180deg,var(--vd-bg-soft),var(--vd-card));
        }
        .vd-sto-h{
            display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
            font-size:13px;font-weight:700;color:var(--vd-sub);margin-bottom:8px;
        }
        .vd-sto-h b{font-size:19px;font-weight:800;color:var(--vd-ink);letter-spacing:-.02em;}
        .vd-sto-h em{margin-left:auto;font-style:normal;font-weight:800;color:var(--vd-acc);}
        .vd-sto-bar{
            position:relative;height:10px;border-radius:999px;overflow:hidden;
            background:var(--vd-hover);
        }
        .vd-sto-bar i{
            display:block;height:100%;border-radius:999px;
            background:linear-gradient(90deg,var(--vd-acc),color-mix(in srgb,var(--vd-acc) 60%,#7ad0ff));
            transition:width .4s cubic-bezier(.2,.8,.2,1);
        }
        .vd-sto-bar-disk i{background:linear-gradient(90deg,#5b8def,#9d7bff);}
        .vd-sto-legend{
            display:flex;flex-wrap:wrap;gap:6px 14px;margin:10px 0 0;padding:0;list-style:none;
            font-size:12px;font-weight:600;color:var(--vd-sub);
        }
        .vd-sto-legend li{display:inline-flex;align-items:center;gap:6px;}
        .vd-sto-legend .sw{width:9px;height:9px;border-radius:3px;flex:none;}
        .vd-sw-file{background:var(--vd-acc);}
        .vd-sw-stk{background:#8b6cf0;}
        .vd-sw-tr{background:#f0a020;}
        .vd-sw-free{background:var(--vd-hover);border:1px solid var(--vd-line);}
        /* 15.40 · 첫 카드가 '서버 디스크' 로 바뀌며 생긴 조각 색 */
        .vd-sw-diskused{background:var(--vd-line);}
        .vd-sto-note{margin:9px 0 0;font-size:11.5px;line-height:1.6;color:var(--vd-sub);}
        .vd-sto-sec h4{
            display:flex;align-items:center;gap:7px;margin:0 0 8px;
            font-size:12.5px;font-weight:800;color:var(--vd-ink);letter-spacing:.01em;
        }
        .vd-sto-sec h4 i{font-size:15px;color:var(--vd-sub);}
        .vd-sto-row,.vd-sto-file{
            display:flex;align-items:center;gap:11px;width:100%;
            padding:8px 10px;border:0;border-radius:11px;background:transparent;
            font:inherit;text-align:left;cursor:pointer;
            transition:background .14s;
        }
        .vd-sto-row:hover,.vd-sto-file:hover{background:var(--vd-hover);}
        .vd-sto-ic{
            display:grid;place-items:center;width:30px;height:30px;flex:none;
            border-radius:9px;font-size:16px;
        }
        .vd-sto-ic i{font-size:16px;}
        .vd-sto-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:4px;}
        .vd-sto-main b{
            font-size:12.5px;font-weight:700;color:var(--vd-ink);
            white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
        }
        .vd-sto-main em{font-style:normal;font-size:11px;color:var(--vd-sub);}
        .vd-sto-main .vd-sto-bar{height:6px;}
        .vd-sto-num{flex:none;text-align:right;display:flex;flex-direction:column;gap:2px;}
        .vd-sto-num b{font-size:12.5px;font-weight:800;color:var(--vd-ink);font-variant-numeric:tabular-nums;}
        .vd-sto-num em{font-style:normal;font-size:10.5px;color:var(--vd-sub);}
        .vd-sto-none{margin:0;font-size:12px;color:var(--vd-sub);}
        .vd-sto-trash .vd-fchip{margin-top:2px;}

        /* ═══ 25.1 · 단축키 도움말 ══════════════════════════════════ */
        .vd-help-sec h4{
            margin:0 0 7px;font-size:11.5px;font-weight:800;letter-spacing:.06em;
            text-transform:uppercase;color:var(--vd-sub);
        }
        .vd-help-sec ul{margin:0 0 4px;padding:0;list-style:none;display:flex;flex-direction:column;gap:3px;}
        .vd-help-sec li{
            display:flex;align-items:center;gap:12px;
            padding:5px 8px;border-radius:8px;
        }
        .vd-help-sec li:hover{background:var(--vd-hover);}
        .vd-help-keys{flex:none;display:inline-flex;align-items:center;gap:3px;min-width:132px;}
        .vd-help-keys kbd{
            display:inline-block;min-width:22px;padding:2px 6px;
            border:1px solid var(--vd-line);border-bottom-width:2px;border-radius:6px;
            background:var(--vd-bg-soft);color:var(--vd-ink);
            font:600 11.5px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center;
        }
        .vd-help-keys em{font-style:normal;color:var(--vd-sub);font-size:11px;}
        .vd-help-d{font-size:12.5px;color:var(--vd-ink2);}

        /* ═══ 25.1 · 끌어다 놓기 · 올리기 대기열 확장 ═══════════════ */
        .vd.dragging .vd-item{cursor:grabbing;}
        .vd.dragging .vd-nav-i[data-sec="star"],
        .vd.dragging .vd-nav-i[data-sec="trash"]{outline:1px dashed var(--vd-line);outline-offset:-3px;}
        .vd-nav-i.drop-on{
            background:var(--vd-acc-soft)!important;color:var(--vd-acc-ink)!important;
            box-shadow:inset 0 0 0 2px var(--vd-acc);
        }
        .vd-dragcount{
            padding:6px 11px;border-radius:999px;background:var(--vd-acc);color:var(--vd-acc-ink);
            font:800 12px/1 inherit;box-shadow:0 6px 18px -6px rgba(10,14,24,.6);
        }
        .vd-q-eta{font-size:11.5px;font-weight:700;color:var(--vd-sub);white-space:nowrap;}
        .vd-q-eta.bad{color:var(--vd-red);}
        .vd-queue header #vdQueueRetry{color:#f0a020;}


        /* 모바일에서 레일을 서랍으로 쓸 때 깔리는 막 */
        .vd-scrim{display:none;}
        .vd.rail-open .vd-scrim{
            display:block;position:absolute;inset:0;z-index:9;
            background:rgba(12,14,20,.42);animation:vdFade .16s ease;
        }
        .vd-narrow-only{display:none!important;}

        /* ── 애니메이션 ───────────────────────────────────────────── */
        @keyframes vdFade{from{opacity:0;}to{opacity:1;}}
        @keyframes vdPop{from{opacity:0;transform:scale(.96) translateY(4px);}to{opacity:1;transform:none;}}
        @keyframes vdSpin{to{transform:rotate(360deg);}}
        @keyframes vdSlideDown{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:none;}}
        @keyframes vdQueueIn{from{opacity:0;transform:translateY(16px) scale(.97);}to{opacity:1;transform:none;}}
        @keyframes vdShimmer{from{background-position:120% 0;}to{background-position:-120% 0;}}
        @keyframes vdFlash{
            0%{background:color-mix(in srgb,var(--vd-acc) 34%,transparent);}
            100%{background:transparent;}
        }
        .vd-spin-i{display:inline-block;animation:vdSpin .9s linear infinite;}

        /* ── 좁은 화면 (태블릿) ───────────────────────────────────── */
        @media(max-width:1180px){
            .vd{--vd-rail-w:236px;--vd-detail-w:296px;}
            .vd-head,.vd-item{grid-template-columns:40px minmax(0,1fr) 96px 122px 40px;}
            .vd-head .c-kind,.vd-item .c-kind{display:none;}
        }
        @media(max-width:900px){
            .vd-head,.vd-item{grid-template-columns:40px minmax(0,1fr) 96px 40px;}
            .vd-head .c-date,.vd-item .c-date{display:none;}
            .vd-title{max-width:34vw;font-size:17px;}
        }

        /* ── 폰 — 레일은 서랍, 세부정보는 아래 시트 ─────────────── */
        @media(max-width:640px){
            .vd{
                grid-template-columns:minmax(0,1fr) 0px;
                --vd-top-h:56px;--vd-row-h:56px;
            }
            .vd.detail-on{grid-template-columns:minmax(0,1fr) 0px;}
            .vd-rail{
                position:absolute;left:0;top:0;bottom:0;width:min(84vw,296px);z-index:10;
                transform:translateX(-102%);transition:transform .26s cubic-bezier(.2,.8,.2,1);
                box-shadow:0 0 44px rgba(0,0,0,.24);grid-column:1;
            }
            .vd.rail-open .vd-rail{transform:none;}
            .vd-main{grid-column:1;}
            .vd-narrow-only{display:flex!important;}
            .vd-top{padding:0 10px 0 6px;gap:6px;}
            .vd-title{display:none;}
            .vd-searchwrap{max-width:none;margin:0;}
            .vd-search{height:42px;font-size:16px;}     /* iOS 자동 확대 방지 */
            .vd-top-tools{gap:0;}
            .vd-up span{display:none;}
            .vd-up{width:38px;padding:0;justify-content:center;}
            .vd-sub{padding:5px 10px;gap:8px;flex-wrap:wrap;}
            .vd-sub-l{font-size:12px;flex:1;min-width:0;}
            .vd-chip span{display:none;}
            .vd-chip{width:32px;padding:0;justify-content:center;}
            .vd-selbar{padding:5px 8px;gap:8px;}
            .vd-selbar-acts{width:100%;justify-content:space-between;margin-left:0;}
            .vd-sb{height:36px;padding:0 8px;flex:1;justify-content:center;}
            .vd-sb-t{display:none;}
            .vd-sb i{font-size:18px;}
            .vd-sb-x{flex:none;width:36px;}
            .vd-scroll{padding:0 4px 120px;}
            .vd-list.rows{padding:2px 4px 0;}
            .vd-item{grid-template-columns:38px minmax(0,1fr) 34px;gap:6px;padding:0 4px;}
            .vd-item .c-kind,.vd-item .c-size,.vd-item .c-date{display:none;}
            .vd-item .vd-mini{width:32px;height:32px;font-size:17px;border-radius:9px;}
            .vd-nm-t{font-size:13.5px;}
            .vd-nm-s{display:block;}
            .vd-item .c-act{gap:0;}
            .vd-list.grid{grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:10px;padding:10px 4px 0;}
            .vd-list.grid .vd-tile{height:104px;}
            /* 세부정보는 오른쪽 칸 대신 아래 시트로 */
            .vd-detail{
                position:absolute;left:0;right:0;bottom:0;top:auto;z-index:11;
                max-height:min(78dvh,620px);border-left:0;border-top:1px solid var(--vd-line);
                border-radius:20px 20px 0 0;box-shadow:0 -14px 40px -12px rgba(16,24,40,.34);
                grid-column:1;
            }
            .vd-dt-hero{height:150px;margin:12px 14px 0;}
            .vd-queue{right:8px;left:8px;bottom:8px;width:auto;}
            .vd-pv-nav{width:40px;height:40px;font-size:20px;}
            .vd-pv-nav.prev{left:6px;}
            .vd-pv-nav.next{right:6px;}
            .vd-pv-name{max-width:52vw;font-size:13px;}
            .vd-pv-meta{display:none;}
            .vd-menu{
                left:8px!important;right:8px!important;top:auto!important;bottom:max(8px,env(safe-area-inset-bottom))!important;
                width:auto!important;min-width:0;max-height:min(70dvh,540px);overflow-y:auto;
                border-radius:18px;padding:7px;
            }
            .vd-menu-i{height:44px;font-size:14px;}
            .vd-empty{padding:52px 16px;}
            .vd-skel-row{grid-template-columns:38px minmax(0,1fr) 34px;}
            .vd-skel-row i:nth-child(3),.vd-skel-row i:nth-child(4),.vd-skel-row i:nth-child(5){display:none;}
        }
        @media(max-width:380px){
            .vd-list.grid{grid-template-columns:repeat(auto-fill,minmax(128px,1fr));}
        }

        /* 손가락 화면에서는 hover 대신 꾹 누름 표시 */
        @media(hover:none){
            .vd-item:active{background:var(--vd-hover);}
            .vd-check,.vd-row-act,.vd-star{opacity:1!important;}
        }

        /* 움직임을 줄이는 설정을 존중한다 */
        @media(prefers-reduced-motion:reduce){
            .vd,.vd.open,.vd-rail,.vd-queue,.vd-menu,.vd-dialog,.vd-dlg-box,.vd-dropcard,
            .vd-item,.vd-list.grid .vd-item,.vd-list.grid .vd-tile img,.vd-selbar,.vd-new i{
                transition:none!important;animation:none!important;
            }
            .vd-skel i{animation:none!important;}
        }

        /* 인쇄 — 보관함 화면은 종이에 남기지 않는다 */
        @media print{ .vd,.vd-preview,.vd-queue,.vd-dropzone,.vd-menu,.vd-dialog{display:none!important;} }

        /* ===== 스티커 보관함 격자 (파일 보관함이 화면으로 옮겨 간 뒤에도
               #stkList 가 이 격자를 그대로 쓴다 — .vault-grid · .v-file) ===== */
        .vault-btn.locked{ opacity:.5; }
        .vault-btn.locked:hover{ opacity:.85; }
        .vault-desk{
            position:relative;min-height:270px;max-height:50vh;overflow:auto;
            border:1px solid var(--border);border-radius:4px;padding:14px;
            background:
                radial-gradient(circle at 18% 12%, rgba(59,130,246,.07), transparent 42%),
                radial-gradient(circle at 82% 88%, rgba(139,92,246,.07), transparent 42%),
                var(--bg2);
            transition:box-shadow .18s, border-color .18s;
        }
        .vault-grid{
            display:grid;grid-template-columns:repeat(auto-fill,minmax(94px,1fr));
            gap:6px;align-content:start;
        }
        .v-file{
            position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;
            padding:10px 6px 8px;border-radius:4px;cursor:pointer;
            border:1px solid transparent;transition:background .14s,border-color .14s;
        }
        .v-file:hover{ background:rgba(37,99,235,.09);border-color:rgba(37,99,235,.22); }
        .v-file.sel{ background:rgba(37,99,235,.17);border-color:rgba(37,99,235,.55); }
        .v-ico{
            width:48px;height:48px;border-radius:4px;color:#fff;font-size:23px;flex-shrink:0;
            display:flex;align-items:center;justify-content:center;
            box-shadow:0 2px 7px rgba(0,0,0,.16);
        }
        .v-thumb{
            width:48px;height:48px;border-radius:4px;object-fit:cover;flex-shrink:0;
            box-shadow:0 2px 7px rgba(0,0,0,.16);background:var(--card);
        }
        .v-name{
            font-size:11.5px;line-height:1.35;color:var(--text1);text-align:center;
            word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;
            -webkit-box-orient:vertical;overflow:hidden;max-width:100%;
        }
        .v-size{ font-size:10px;color:var(--text3);margin-top:-2px; }
        .vault-empty{
            grid-column:1/-1;                 /* 격자 전체 폭을 쓴다 */
            display:flex;flex-direction:column;align-items:center;justify-content:center;
            gap:7px;padding:52px 10px;color:var(--text3);font-size:13px;text-align:center;
            white-space:normal;word-break:keep-all;
        }
        .vault-empty i{ font-size:38px;opacity:.4; }

        @media(max-width:640px){
            .vault-grid{ grid-template-columns:repeat(auto-fill,minmax(80px,1fr)); }
            .vault-desk{ padding:10px;min-height:210px; }
        }
        @media(max-width:640px){ .offline-badge span{display:none;} }

        .note-grid{
            display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;
            gap:8px;padding:0 4px;width:100%;
        }
        @media(max-width:640px){
            .note-grid{gap:10px;padding:0 10px;justify-content:flex-start;}
        }

        .note-card{
            width:200px;flex:0 0 200px;
            background:var(--card);border:1px solid var(--border);border-radius:5px;
            overflow:hidden;cursor:pointer;position:relative;
            transition:transform .22s cubic-bezier(.2,.8,.3,1),box-shadow .22s,border-color .22s;
            box-shadow:0 1px 3px rgba(0,0,0,.05);
        }
        @media(max-width:640px){
            /* 14.14 · 폭·높이는 문서 끝 v1414-phone 에서 정한다 (카드 크기
               설정 body.card-l 이 특이도로 이기던 문제를 거기서 함께 막는다). */
            .note-card:hover{transform:none;box-shadow:0 1px 3px rgba(0,0,0,.05);}
            .note-card:active{transform:scale(.97);}
        }
        .note-card:hover{transform:translateY(-6px);box-shadow:0 14px 32px rgba(0,0,0,.13);border-color:rgba(79,110,247,.4);}
        .note-card.selected{border:2px solid var(--accent);box-shadow:0 0 0 3px var(--accent),0 0 0 6px rgba(79,110,247,.24);}
        .note-card .select-check{
            position:absolute;top:8px;left:8px;width:24px;height:24px;
            background:var(--accent);border-radius:50%;color:#fff;
            display:none;align-items:center;justify-content:center;z-index:14;font-size:14px;
        }
        .note-card.selected .select-check{display:flex;}
        .select-mode .note-card{cursor:default;}
        .select-mode .note-card:hover{transform:none;}

        .note-preview{
            overflow:hidden;position:relative;background:var(--bg2);height:260px;
        }
        /* 14.14 · .note-preview 폰 높이는 문서 끝 v1414-phone (카드 폭 비례) */
        .note-preview-frame{
            position:absolute;top:0;left:0;transform-origin:top left;
            user-select:none;pointer-events:none;box-shadow:0 0 0 1px var(--border);
        }
        .page-count-badge{
            position:absolute;right:10px;bottom:10px;z-index:12;
            background:var(--accent);color:#fff;font-size:10px;font-weight:700;
            padding:2px 7px;border-radius:999px;letter-spacing:.02em;
            box-shadow:0 1px 4px rgba(0,0,0,.18);pointer-events:none;
        }
        .note-card-name{
            padding:11px 14px;border-top:1px solid var(--border);font-size:13px;font-weight:600;
            display:flex;justify-content:space-between;align-items:center;gap:8px;
            background:var(--card);
        }
        .note-card-name .text-xs{font-weight:400;}

        /* ===== 종이 배경 (에디터/미리보기 공용 — 완전 동일) ===== */
        .paper-blank{background-color:var(--card);}
        .paper-lined{
            background-color:var(--card);
            /* 위에서부터 47.5px, 32px 간격으로 균일하게.
               선 하나만 그리는 타일(높이 32px)을 세로로 반복시킨다.
               예전에는 repeating-gradient 를 페이지 전체에 깔았는데,
               페이지 높이(1100)가 32의 배수가 아니라 이음매에서
               12px 짜리 줄이 끼어들었다. */
            /* 1) 위쪽 47.5px 를 종이색으로 덮어 첫 줄 여백을 만들고
               2) 그 아래로 32px 간격 줄을 반복 (먼저 쓴 것이 위에 그려진다) */
            background-image:linear-gradient(var(--card) 0 100%),
                             linear-gradient(var(--line) 1px, transparent 1px);
            background-size:100% 47.5px, 100% 32px;
            background-position:0 0, 0 15.5px;
            background-repeat:no-repeat, repeat;
        }
        .paper-grid{
            background-color:var(--card);
            background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);
            background-size:32px 32px;background-position:0 0;background-repeat:repeat;
        }
        .paper-dotted{
            background-color:var(--card);
            background-image:radial-gradient(circle,var(--dot) 1px,transparent 1px);
            background-size:24px 24px;background-position:0 0;background-repeat:repeat;
        }

        /* ===== 폴더 ===== */
        .folder-card{
            width:200px;flex:0 0 200px;background:var(--card);border:1px solid var(--border);
            border-radius:5px;overflow:hidden;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.05);
            position:relative;transition:transform .22s cubic-bezier(.2,.8,.3,1),box-shadow .22s,border-color .22s;
        }
        @media(max-width:640px){
            /* 14.14 · 폭·높이는 문서 끝 v1414-phone 에서 정한다 */
            .folder-card:hover{transform:none;box-shadow:0 1px 3px rgba(0,0,0,.05);}
            .folder-card:active{transform:scale(.97);}
        }
        .folder-card:hover{transform:translateY(-6px);box-shadow:0 14px 32px rgba(0,0,0,.13);border-color:rgba(79,110,247,.4);}
        .folder-card.drop{border-color:var(--accent);background:rgba(79,110,247,.08);transform:scale(1.04);}
        .folder-thumb{
            height:260px;display:flex;align-items:center;justify-content:center;
            background:var(--bg2);position:relative;
        }
        @media(max-width:640px){ .folder-thumb>i{font-size:52px;} }
        .folder-thumb>i{font-size:64px;opacity:.95;transition:transform .22s cubic-bezier(.2,.8,.3,1);}
        .folder-card:hover .folder-thumb>i{transform:scale(1.07) rotate(-3deg);}
        .folder-count{
            position:absolute;right:10px;bottom:10px;color:#fff;
            font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;
        }
        .folder-lock{
            position:absolute;left:10px;top:10px;width:26px;height:26px;border-radius:50%;
            background:var(--card);border:1px solid var(--border);color:var(--text2);
            display:flex;align-items:center;justify-content:center;font-size:13px;
            box-shadow:0 1px 5px rgba(0,0,0,.14);
        }
        .folder-card.locked-folder .folder-thumb{filter:saturate(.75);}
        /* 폴더 색 고르기 */
        .fcolor-grid{display:flex;flex-wrap:wrap;gap:10px;padding:4px 2px 2px;}
        .fcolor-dot{
            width:34px;height:34px;border-radius:50%;cursor:pointer;border:3px solid transparent;
            display:flex;align-items:center;justify-content:center;color:#fff;font-size:15px;
            transition:transform .15s ease;
        }
        .fcolor-dot:hover{transform:scale(1.12);}
        .fcolor-dot.on{border-color:var(--text1);}
        .ficon-grid{display:flex;flex-wrap:wrap;gap:8px;padding:4px 2px 2px;}
        .ficon-btn{
            width:40px;height:40px;border-radius:4px;cursor:pointer;font-size:20px;
            display:flex;align-items:center;justify-content:center;
            background:var(--bg2);border:2px solid var(--border);color:var(--text2);
        }
        .ficon-btn:hover{border-color:var(--accent);color:var(--accent);}
        .ficon-btn.on{border-color:var(--accent);color:#fff;background:var(--accent);}
        .breadcrumb{
            display:flex;align-items:center;gap:6px;padding:0 4px 4px;font-size:13px;color:var(--text2);
        }
        .breadcrumb button{
            background:none;border:none;color:var(--accent);cursor:pointer;font-size:13px;
            display:flex;align-items:center;gap:5px;padding:4px 6px;border-radius:3px;
        }
        .breadcrumb button:hover{background:var(--bg2);}
        .note-card.dragging{opacity:.45;transform:scale(.95);}
        /* 14.75 · 꾹 눌러 '집힌' 카드(아직 끌기 전) — 강조색 고리만. transform 은 건드리지
           않는다(캐주얼 홈 스택의 인라인 translate/rotate 를 깨지 않게). !important 는
           양쪽 테마의 :hover 그림자보다 앞서기 위해서다. */
        .note-card.lp-armed{
            box-shadow:0 0 0 2px var(--accent),0 12px 28px rgba(0,0,0,.18)!important;
            border-color:var(--accent)!important;
            transition:box-shadow .12s,border-color .12s;
        }
        .add-card{
            width:200px;flex:0 0 200px;
            border:2px dashed var(--border);background:transparent;border-radius:4px;
            display:flex;flex-direction:column;align-items:center;justify-content:center;
            /* 같은 줄 노트 카드 높이(미리보기+이름칸)에 정확히 맞춘다 —
               그리드가 align-items:flex-start 라 스스로 stretch 를 선언해야 한다.
               min-height 는 빈 폴더처럼 혼자 있을 때의 기본 높이. */
            align-self:stretch;
            min-height:300px;cursor:pointer;transition:all .3s;color:var(--text3);
        }
        /* 14.14 · .add-card 폰 크기는 문서 끝 v1414-phone 에서 정한다 */
        .add-card{border-radius:5px;transition:all .22s cubic-bezier(.2,.8,.3,1);}
        .add-card:hover{border-color:var(--accent);color:var(--accent);
            background:rgba(79,110,247,.05);transform:translateY(-4px);}

        /* ===== Editor ===== */
        .editor{
            position:fixed;inset:0;z-index:100;background:var(--bg);
            transform:translateX(100%);transition:transform .4s cubic-bezier(.4,0,.2,1);
            display:flex;flex-direction:column;
        }
        .editor.open{transform:translateX(0);}
        /* ═══════════════════════════════════════════════════════════
           9.2 · 한 줄 툴바 (좌우 균형)
             한 줄을 [왼쪽 1fr | 가운데 auto | 오른쪽 1fr] 로 나눈다.
             가운데 도구 묶음은 양옆 내용의 길이와 상관없이 언제나
             화면 정중앙에 온다 → 한쪽으로 쏠려 보이지 않는다.
             글자 서식은 툴바에서 빼내 '글상자 옆에 뜨는 막대'로 옮겼다.
             그래서 두 번째 줄이 필요 없고, 툴바 너비도 흔들리지 않는다.
           ═══════════════════════════════════════════════════════════ */
        .editor-toolbar{
            background:var(--bg);border-bottom:1px solid var(--border);
            padding:7px 14px;flex:none;position:relative;z-index:1100;
            display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;
            min-height:52px;
            /* 14.13.4 · 서식이 상단 바로 통합되면서 폭이 늘었으니, 화면이 좁은 데스크톱에서는
               깨지지 않고 가로 스와이프로 넘기도록 (스크롤바는 숨김) */
            overflow-x:auto;scrollbar-width:none;
        }
        .editor-toolbar::-webkit-scrollbar{display:none;}
        .tb-left{display:flex;align-items:center;gap:6px;min-width:0;}
        .tb-mid{display:flex;align-items:center;gap:2px;justify-self:center;}
        .tb-right{display:flex;align-items:center;gap:6px;justify-self:end;}

        .editor-toolbar #edTitle{
            flex:1 1 auto;min-width:60px;font-size:14px;font-weight:500;letter-spacing:-.01em;
            border:1px solid transparent;border-radius:8px;padding:7px 10px;background:transparent;
            text-overflow:ellipsis;transition:background .15s,border-color .15s;
        }
        .editor-toolbar #edTitle:hover{background:var(--bg2);}
        .editor-toolbar #edTitle:focus{background:var(--bg2);border-color:var(--accent);}

        /* 가운데 도구: 뜻이 비슷한 것끼리 묶고 사이에 얇은 선 */
        .tb-mid .tool-btn{width:38px;height:38px;font-size:19px;border-radius:9px;}
        .tb-mid .tool-btn.sm{width:32px;height:32px;font-size:16px;}
        .tool-sep{width:1px;height:22px;background:var(--border);margin:0 7px;flex:none;}
        /* 14.13.4 · 글자 크기 ± 버튼은 1536px 이하 데스크톱에선 숨김 (입력칸은 그대로) */
        @media (min-width:641px) and (max-width:1536px){
            /* 15.27 · 툴바 도구에 붙은 display:inline-flex!important 보다 뒤에서 · 더 구체적으로
               걸어야 숨김이 이긴다(안 그러면 ± 단추가 좁은 데스크톱에서도 남아 폭을 먹는다). */
            .tb-hide-md,
            .editor-toolbar .tb-hide-md,
            .editor-toolbar .tool-btn.tb-hide-md,
            .editor-toolbar .tool-btn.sm.tb-hide-md,
            html.theme-pro .editor-toolbar .tool-btn.sm.tb-hide-md{display:none !important;}
        }

        /* 페이지 이동칸 — 숫자를 넣고 Enter 치면 바로 그 쪽으로 */
        .pg-nav{display:flex;align-items:center;gap:4px;padding:3px 7px;border-radius:9px;
            background:var(--bg2);border:1px solid var(--border);white-space:nowrap;}
        .pg-nav input{width:34px;height:24px;text-align:center;border:1px solid transparent;
            border-radius:6px;background:transparent;color:var(--text1);
            font-size:12.5px;font-weight:800;outline:none;-moz-appearance:textfield;}
        .pg-nav input::-webkit-outer-spin-button,.pg-nav input::-webkit-inner-spin-button{
            -webkit-appearance:none;margin:0;}
        .pg-nav input:focus{background:var(--card);border-color:var(--accent);}
        .pg-nav .tot{font-size:12px;color:var(--text3);font-weight:700;}
        .pg-nav button{width:21px;height:21px;border:0;background:transparent;color:var(--text3);
            border-radius:5px;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;}
        .pg-nav button:hover{background:var(--card);color:var(--accent);}

        .editor-toolbar>*{min-width:0;}
        .tb-group{display:flex;align-items:center;gap:1px;}
        .tool-btn{width:34px;height:34px;}
        @media(max-width:900px){ .tb-optional{display:none;} }
        @media(max-width:820px){ .tb-hide-sm{display:none !important;} }

        /* 14.13.4 · 떠 있는 서식 막대(fmtBar)는 상단 바와 중복이라 제거.
           글자 크기 입력칸은 이제 상단 바(에디터 툴바) 안에 있다. */
        #fsInput{width:38px;height:28px;text-align:center;border:1px solid var(--border);
            border-radius:7px;padding:2px;font-size:12.5px;font-weight:700;
            background:var(--bg2);color:var(--text1);outline:none;-moz-appearance:textfield;}
        #fsInput::-webkit-outer-spin-button,#fsInput::-webkit-inner-spin-button{
            -webkit-appearance:none;margin:0;}
        #fsInput:focus{border-color:var(--accent);}
        #fsInput.mixed{color:var(--text3);font-weight:800;letter-spacing:.08em;}
        /* 팝오버가 잘리지 않게 */
        .split-btn{position:relative;z-index:1300;}

        /* 현재 쪽 배지 */
        .page-badge{
            display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0 10px;
            border-radius:99px;background:var(--bg2);border:1px solid var(--border);
            color:var(--text2);font-size:12px;font-weight:700;cursor:pointer;white-space:nowrap;
        }
        .page-badge:active{transform:scale(.95);}

        /* ===== 더보기 서랍 ===== */
        .more-sheet{
            position:fixed;inset:0;z-index:1400;display:none;
            background:rgba(15,23,42,.34);backdrop-filter:blur(2px);
        }
        .more-sheet.show{display:block;}
        /* 범주 서랍이 열려도 위 툴바는 앞에 남아 다른 범주로 바로 바꿀 수 있다. */
        .editor:has(.more-sheet.show) .editor-toolbar{z-index:1450;}
        .more-panel{
            position:absolute;right:12px;top:56px;width:min(420px,calc(100vw - 24px));
            max-height:min(74vh,600px);display:flex;flex-direction:column;
            background:var(--card);border:1px solid var(--border);border-radius:14px;
            box-shadow:0 18px 50px rgba(15,23,42,.22);overflow:hidden;
            animation:moreIn .16s cubic-bezier(.4,0,.2,1);
        }
        @keyframes moreIn{from{opacity:0;transform:translateY(-6px) scale(.99)}to{opacity:1;transform:none}}
        .more-tabs{display:flex;gap:2px;flex:1;min-width:0;}
        .more-tabs button{
            flex:1;padding:8px 4px;border:none;background:transparent;border-radius:8px;
            color:var(--text3);font-size:13px;font-weight:700;cursor:pointer;white-space:nowrap;
        }
        .more-tabs button.on{background:var(--bg2);color:var(--text1);}
        .more-body{overflow-y:auto;padding:10px;}
        .more-lbl{font-size:11px;font-weight:800;color:var(--text3);margin:12px 2px 6px;letter-spacing:.04em;}
        .more-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;}
        @media(max-width:420px){ .more-grid{grid-template-columns:repeat(3,1fr);} }
        .more-grid button{
            display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
            padding:11px 4px;border:1px solid transparent;background:var(--bg2);border-radius:10px;
            color:var(--text1);cursor:pointer;font-size:11.5px;font-weight:600;line-height:1.15;
            min-height:64px;text-align:center;
        }
        .more-grid button i{font-size:19px;color:var(--text2);}
        .more-grid button:hover{border-color:var(--border);}
        .more-grid button:active{transform:scale(.96);}
        .more-grid button.active{background:var(--accent);color:#fff;}
        .more-grid button.active i{color:#fff;}
        .more-grid button.danger{color:#e74c3c;}
        .more-grid button.danger i{color:#e74c3c;}
        .more-row{display:flex;align-items:center;gap:8px;padding:8px 2px;font-size:13px;color:var(--text2);}
        .more-row select,.more-row .page-jump{
            margin-left:auto;height:34px;padding:0 8px;border:1px solid var(--border);
            border-radius:8px;background:var(--bg2);color:var(--text1);font-size:13px;outline:none;
        }
        .more-row .page-jump{width:62px;text-align:center;margin-left:auto;}

        /* 편집기 빠른 메뉴에는 페이지·보기·복원 동작만 둔다. */
        .tool-btn{
            width:36px;height:36px;display:flex;align-items:center;justify-content:center;
            border-radius:3px;border:none;background:transparent;color:var(--text2);
            cursor:pointer;transition:background .2s,color .2s;font-size:18px;
        }
        .tool-btn:hover{background:var(--bg2);color:var(--text1);}
        .tool-btn.active{background:var(--accent);color:#fff;box-shadow:0 2px 6px rgba(79,110,247,.35);}
        .tool-btn:active{transform:scale(.93);}
        .tool-btn:disabled{opacity:.35;color:var(--text3)!important;background:transparent!important;cursor:default;pointer-events:none;filter:grayscale(.2);}
        .tool-btn[aria-disabled="true"]{opacity:.35;color:var(--text3)!important;cursor:default;}
        .tool-btn.is-disabled{opacity:.35;color:var(--text3)!important;pointer-events:none;filter:grayscale(.2);}
        .toolbar-cats{gap:2px;padding:2px;}
        .tool-cat{height:34px;padding:0 8px;border:0;border-radius:8px;background:transparent;color:var(--text2);
            display:flex;align-items:center;gap:5px;white-space:nowrap;cursor:pointer;font-size:11.5px;font-weight:700;
            transition:background .15s,color .15s,transform .1s;}
        .tool-cat>i:first-child{font-size:15px}.tool-cat .caret{font-size:12px;color:var(--text3);}
        .tool-cat:hover,.tool-cat.on{background:color-mix(in srgb,var(--accent) 11%,var(--bg2));color:var(--accent);}
        .tool-cat:active{transform:scale(.96)}
        .tool-sep{width:1px;height:24px;background:var(--border);margin:0 4px;}

        /* ===== 워드식 색상 스플릿 버튼 ===== */
        .split-btn{display:flex;align-items:center;position:relative;border-radius:3px;overflow:visible;}
        .split-btn .main{
            width:34px;height:36px;display:flex;flex-direction:column;align-items:center;justify-content:center;
            border:none;background:transparent;cursor:pointer;color:var(--text2);gap:1px;border-radius:3px 0 0 3px;
        }
        .split-btn .main:hover{background:var(--bg2);}
        .split-btn .main .glyph{font-size:15px;font-weight:800;line-height:1;}
        .split-btn .bar{width:18px;height:4px;border-radius:2px;background:#111;}
        .split-btn .caret{
            width:16px;height:36px;border:none;background:transparent;cursor:pointer;
            color:var(--text3);font-size:11px;display:flex;align-items:center;justify-content:center;
            border-radius:0 3px 3px 0;
        }
        .split-btn .caret:hover{background:var(--bg2);color:var(--text1);}
        /* 18.6 · 글자색/형광펜 버튼만 흰색 뒷판 — 글자색 아이콘이 툴바 배경에
           섞여 잘 안 보여서. 형광펜의 펜 아이콘은 검정으로, 그 밑 색 바는 기본
           노랑(#ffff00) 그대로.
           15.56.1 · 편집기 툴바에서는 두 글리프(A · 형광펜)가 모두 채운 윤곽이고 색은
           단추 잉크색을 따른다 — 아래 '.editor-toolbar .split-btn' 규칙들이 이 기본값을 덮는다. */
        #textColorWrap .main,#hlWrap .main{background:#fff;}
        #textColorWrap .main:hover,#hlWrap .main:hover{background:#eef1f4;}
        #hlWrap .main .glyph{color:#000;}
        .font-wrap{position:relative;display:flex;align-items:center;}
        .font-btn{
            height:34px;padding:0 10px;border:none;background:transparent;cursor:pointer;
            display:flex;align-items:center;gap:4px;color:var(--text1);font-size:12px;
            border-radius:3px;max-width:180px;min-width:80px;
        }
        .font-btn:hover{background:var(--bg2);}
        .font-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .font-menu{
            position:fixed;z-index:2000;background:var(--card);border:1px solid var(--border);
            border-radius:10px;padding:6px;display:none;min-width:200px;max-height:340px;overflow-y:auto;
            box-shadow:0 10px 30px rgba(0,0,0,.18);
        }
        .font-menu.show{display:block;}
        .key-sec{font-size:12px;font-weight:700;color:var(--accent);margin:14px 0 6px;letter-spacing:.3px;}
        .key-sec:first-child{margin-top:0;}
        .key-row{display:flex;align-items:center;justify-content:space-between;gap:12px;
            padding:7px 2px;border-bottom:1px dashed var(--border);font-size:13px;color:var(--text1);}
        .key-row:last-child{border-bottom:none;}
        .key-row kbd{display:inline-block;padding:2px 7px;border-radius:3px;background:var(--bg2);
            border:1px solid var(--border);border-bottom-width:2px;font-size:11px;font-family:inherit;
            color:var(--text2);white-space:nowrap;}
        /* 14.39.1 · 항목 = 한국어 이름 + 영어 이름을 해당 글꼴 자체로 + 현재 선택 체크.
           예시 문구(abc 가나다)는 쓰지 않는다. .fi-ko/.fi-en 은 둘 다
           .fi-sample 의 font-family(인라인 해당 글꼴)를 상속한다. */
        .font-item{
            padding:8px 10px;border-radius:8px;cursor:pointer;font-size:15px;color:var(--text1);
            display:flex;align-items:center;gap:10px;
        }
        .font-item .fi-sample{flex:1;min-width:0;overflow:hidden;
            font-size:15px;line-height:1.35;color:var(--text1);
            display:flex;align-items:baseline;gap:8px;}
        .font-item .fi-sample .fi-en{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
            font-size:14px;line-height:1.35;}
        .font-item .fi-check{flex:none;display:none;font-size:15px;color:var(--accent);line-height:1;}
        .font-item:hover{background:var(--bg2);}
        .font-item.sel{background:color-mix(in srgb, var(--accent) 12%, transparent);}
        .font-item.sel .fi-sample{color:var(--accent);}
        .font-item.sel .fi-check{display:block;}

        .color-popover{
            position:fixed;z-index:2000;background:var(--card);
            border:1px solid var(--border);border-radius:4px;padding:10px;
            box-shadow:0 8px 24px rgba(0,0,0,.14);display:none;min-width:196px;
        }
        .color-popover.show{display:block;}
        .cp-title{font-size:11px;color:var(--text3);margin:0 0 6px 2px;font-weight:600;}
        .cp-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;}
        .color-swatch{
            width:28px;height:28px;border-radius:3px;border:1px solid rgba(0,0,0,.12);
            cursor:pointer;transition:transform .12s;padding:0;
        }
        .color-swatch:hover{transform:scale(1.12);}
        .color-swatch.sel{outline:2px solid var(--accent);outline-offset:2px;}
        .cp-none{
            margin-top:8px;width:100%;padding:7px;border-radius:3px;cursor:pointer;
            border:1px solid var(--border);background:var(--bg2);color:var(--text1);
            font-size:12px;display:flex;align-items:center;justify-content:center;gap:6px;
        }
        .cp-none:hover{border-color:var(--accent);color:var(--accent);}

        /* ===== 페이지 스택 ===== */
        .editor-main{flex:1;display:flex;min-height:0;position:relative;}
        .editor-body{
            flex:1;overflow:auto;scroll-behavior:smooth;padding:4px;min-width:0;
            overflow-anchor:none;
            /* 14.72.6 · 노트(종이) 바깥의 주변 배경을 어둡게 — 종이는 그대로, 캔버스만 변함 */
            background:var(--editor-canvas);
            transition:background-color .3s ease;
        }
        /* ===== 세로 도구막대 ===== */
        .side-bar{
            width:48px;flex:none;display:flex;flex-direction:column;align-items:center;gap:1px;
            padding:8px 0;background:var(--bg);border-right:1px solid var(--border);
            transition:margin-left .25s cubic-bezier(.4,0,.2,1);z-index:60;
            overflow-y:auto;overflow-x:hidden;scrollbar-width:none;
        }
        .side-bar::-webkit-scrollbar{width:0;}
        .side-btn{
            width:36px;height:36px;display:flex;align-items:center;justify-content:center;
            border:none;background:transparent;color:var(--text2);border-radius:4px;
            cursor:pointer;font-size:18px;transition:background .15s,color .15s;
        }
        .side-btn:hover{background:var(--bg2);color:var(--text1);}
        .side-btn.active{background:var(--accent);color:#fff;box-shadow:0 2px 6px rgba(79,110,247,.35);}
        .side-sep{width:24px;height:1px;background:var(--border);margin:5px 0;flex:none;}
        .side-grow{flex:1;min-height:8px;}
        .side-btn{flex:none;}
        /* 접힘 */
        .editor.side-off .side-bar{margin-left:-48px;}
        .editor.side-off .side-panel{margin-left:-248px;}
        .side-open{
            position:absolute;left:0;top:10px;z-index:61;width:22px;height:44px;
            border:1px solid var(--border);border-left:none;border-radius:0 4px 4px 0;
            background:var(--card);color:var(--text3);cursor:pointer;display:none;
            align-items:center;justify-content:center;font-size:14px;
        }
        .editor.side-off .side-open{display:flex;}
        .side-open:hover{color:var(--accent);}
        /* ===== 옆 패널 ===== */
        .side-panel{
            width:0;flex:none;overflow:hidden;background:var(--bg);
            border-right:1px solid transparent;transition:width .22s cubic-bezier(.4,0,.2,1);
            display:flex;flex-direction:column;
        }
        .side-panel.show{width:248px;border-right-color:var(--border);}
        .sp-head{
            display:flex;align-items:center;justify-content:space-between;flex:none;
            padding:10px 8px 8px 14px;font-size:13px;color:var(--text1);
            border-bottom:1px solid var(--border);
        }
        .sp-head button{
            width:26px;height:26px;border:none;background:transparent;color:var(--text3);
            border-radius:3px;cursor:pointer;font-size:15px;
        }
        .sp-head button:hover{background:var(--bg2);color:var(--text1);}
        .sp-body{flex:1;overflow:auto;padding:8px;}
        .sp-sec{
            display:flex;align-items:center;gap:6px;padding:7px 8px;margin-top:4px;
            font-size:11.5px;font-weight:700;color:var(--text2);cursor:pointer;border-radius:3px;
        }
        .sp-sec:hover{background:var(--bg2);}
        .sp-dim{color:var(--text3);font-weight:400;margin-left:auto;font-size:11px;}
        .sp-item{
            padding:6px 10px 6px 22px;font-size:12px;color:var(--text2);
            border-radius:3px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
        }
        .sp-item:hover{background:var(--bg2);color:var(--text1);}
        .sp-item.big{font-weight:700;color:var(--text1);padding-left:14px;}
        .sp-item.row{display:flex;align-items:center;gap:7px;padding-left:10px;}
        .sp-item.row span{overflow:hidden;text-overflow:ellipsis;}
        .sp-x{margin-left:auto;color:var(--text3);}
        .sp-x:hover{color:#e74c3c;}
        .sp-empty{padding:22px 12px;font-size:11.5px;color:var(--text3);text-align:center;line-height:1.7;}
        .sp-btn{
            width:100%;display:flex;align-items:center;justify-content:center;gap:6px;
            padding:8px;margin:6px 0;border:1px dashed var(--border);border-radius:4px;
            background:transparent;color:var(--text2);font-size:12px;cursor:pointer;
        }
        .sp-btn:hover{border-color:var(--accent);color:var(--accent);background:rgba(79,110,247,.05);}
        .sp-pages{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
        .sp-page{cursor:pointer;}
        .sp-thumb{
            width:100%;background:var(--card);border:1px solid var(--border);border-radius:3px;
            display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:15px;
        }
        .sp-page.cur .sp-thumb{border-color:var(--accent);box-shadow:0 0 0 2px rgba(79,110,247,.2);}
        .sp-page:hover .sp-thumb{border-color:var(--accent);}
        .sp-plabel{font-size:10.5px;color:var(--text3);text-align:center;margin-top:3px;}
        .sp-stat{
            display:flex;align-items:center;gap:8px;padding:9px 10px;font-size:12px;color:var(--text2);
            border-bottom:1px solid var(--border);
        }
        .sp-stat:last-child{border-bottom:none;}
        .sp-stat b{margin-left:auto;color:var(--text1);}
        /* 목록에서 고른 요소 반짝임 */
        .flash{animation:elFlash 1.2s ease;}
        @keyframes elFlash{
            0%,100%{box-shadow:none;}
            25%,75%{box-shadow:0 0 0 3px rgba(79,110,247,.55);}
        }
        /* 집중 모드 */
        .editor.focus-on .editor-toolbar{display:none;}
        .editor.focus-on .side-bar{opacity:.25;transition:opacity .2s;}
        .editor.focus-on .side-bar:hover{opacity:1;}
        /* 가이드 격자 */
        .pages-stage.guides .paper::after{
            content:'';position:absolute;inset:0;pointer-events:none;z-index:44;
            background-image:linear-gradient(rgba(79,110,247,.13) 1px,transparent 1px),
                             linear-gradient(90deg,rgba(79,110,247,.13) 1px,transparent 1px);
            background-size:50px 50px;
        }
        /* 페이지 배경색 */
        .pages-stage.tinted .paper{background:var(--paper-tint);}
        .tint-pop{
            /* 15.15 · z-index 1460 — 더보기 서랍(1400) 안에서 열아도 팝오버가 위에 보이게 */
            position:fixed;z-index:1460;display:none;padding:6px;min-width:132px;
            background:var(--card);border:1px solid var(--border);border-radius:4px;box-shadow:var(--shadow);
        }
        .tint-pop.show{display:block;}
        .tint-opt{
            display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:3px;
            font-size:12px;color:var(--text1);cursor:pointer;
        }
        .tint-opt:hover{background:var(--bg2);}
        .tint-opt.on{background:rgba(79,110,247,.1);color:var(--accent);font-weight:700;}
        .tint-opt span{width:16px;height:16px;border-radius:3px;border:1px solid var(--border);flex:none;}
        .cp-item{
            display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--border);
            border-radius:4px;margin-bottom:7px;font-size:12.5px;color:var(--text1);
        }
        .cp-item .sp-dim{display:block;margin:2px 0 0;font-size:11px;}
        .cp-item button{
            margin-left:auto;padding:6px 11px;border:1px solid var(--border);border-radius:3px;
            background:var(--bg2);color:var(--text1);font-size:12px;cursor:pointer;white-space:nowrap;
        }
        .cp-item button:hover{border-color:var(--accent);color:var(--accent);}

        /* ===== 찾아 바꾸기 ===== */
        .find-bar{flex-wrap:wrap;max-width:min(92vw,430px);}
        .find-row2{display:none;width:100%;align-items:center;gap:5px;padding-top:5px;
                   border-top:1px solid var(--border);margin-top:4px;}
        .find-bar.rep .find-row2{display:flex;}
        .find-row2 input{
            flex:1;min-width:80px;height:30px;border:none;outline:none;background:transparent;
            color:var(--text1);font-size:13px;
        }
        .find-row2 button.w{width:auto;padding:0 9px;font-size:11.5px;font-weight:700;white-space:nowrap;}

        /* ===== 체크리스트 ===== */
        .tb-content [data-ck]{cursor:pointer;user-select:none;margin-right:5px;font-size:1.05em;}
        .tb-content [data-ck="1"]{color:#10b981;}
        .tb-content [data-ck="0"]{color:var(--text3);}

        /* 잠금은 동작만 유지하고 노란 테두리·자물쇠 표시는 전혀 그리지 않는다. */
        .tb.el-lock .tb-content,.paper-img.el-lock{outline:none!important;}
        .lock-badge{display:none!important;}

        /* ===== 메모 핀 ===== */
        .layer-pin{position:absolute;inset:0;z-index:46;pointer-events:none;}
        .layer-pin>*{pointer-events:auto;}
        .pin{
            position:absolute;width:24px;height:24px;border-radius:50% 50% 50% 2px;
            background:#f59e0b;color:#fff;display:flex;align-items:center;justify-content:center;
            font-size:12px;cursor:pointer;box-shadow:0 2px 7px rgba(0,0,0,.25);
            /* zoom은 left/top 좌표까지 바꿔 메모가 클릭 지점에서 밀렸다.
               위치는 종이 좌표 그대로 두고 아이콘 크기만 역스케일한다. */
            transform:translate(-50%,-100%) scale(var(--pin-inv,1));
            transform-origin:50% 100%;
        }
        .pin:hover{background:#d97706;}
        .pin.on{background:#2563eb;}
        .pin-pop{
            position:fixed;z-index:1250;display:none;width:250px;padding:10px;
            background:var(--card);border:1px solid var(--border);border-radius:4px;box-shadow:var(--shadow);
        }
        .pin-pop.show{display:block;}
        .pin-pop textarea{
            width:100%;height:82px;resize:vertical;border:1px solid var(--border);border-radius:4px;
            padding:8px;font-size:12.5px;background:var(--bg2);color:var(--text1);outline:none;
            font-family:inherit;line-height:1.5;
        }
        .pin-pop .row{display:flex;gap:6px;margin-top:8px;}
        .pin-pop button{
            flex:1;padding:7px;border:1px solid var(--border);border-radius:3px;background:var(--bg2);
            color:var(--text1);font-size:12px;cursor:pointer;
        }
        .pin-pop button.danger{color:#e74c3c;}
        .pin-pop button:hover{border-color:var(--accent);}
        body.pin-mode .paper{cursor:crosshair;}

        /* ===== 발표(읽기) 모드 ===== */
        .present{
            position:fixed;inset:0;z-index:2500;background:#111418;display:none;
            align-items:center;justify-content:center;flex-direction:column;
        }
        .present.show{display:flex;}
        .present img{max-width:94vw;max-height:86vh;box-shadow:0 12px 50px rgba(0,0,0,.6);border-radius:3px;background:#fff;}
        .present-bar{
            position:absolute;bottom:16px;display:flex;align-items:center;gap:8px;
            padding:8px 12px;background:rgba(255,255,255,.1);border-radius:99px;backdrop-filter:blur(8px);
        }
        .present-bar button{
            width:34px;height:34px;border:none;border-radius:50%;background:rgba(255,255,255,.14);
            color:#fff;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;
        }
        .present-bar button:hover{background:rgba(255,255,255,.28);}
        .present-bar span{color:#fff;font-size:12.5px;min-width:54px;text-align:center;}
        .present-load{color:#fff;font-size:13px;opacity:.7;}

        /* ===== 페이지 순서 바꾸기 ===== */
        .sp-page{position:relative;}
        .sp-page .sp-ord{
            position:absolute;top:2px;right:2px;display:none;gap:2px;
        }
        .sp-page:hover .sp-ord{display:flex;}
        .sp-ord button{
            width:19px;height:19px;border:none;border-radius:3px;background:var(--card);
            color:var(--text2);font-size:11px;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.18);
            display:flex;align-items:center;justify-content:center;
        }
        .sp-ord button:hover{background:var(--accent);color:#fff;}

        /* ===== 단어 빈도 분석 (중요어 색칠) =====
           14.39.6 · '산만함' 수정 — 배경 강조는 최상위 단계에만 옅게 준다.
           (예전엔 두 단계 모두 진한 배경이라 본문이 얼룩덜룩했다)
           15.5.1 · '잘 안 보인다' 수정 — ① 글자색계(WF_TIER)를 진하게 내려
           전 단계가 흰지 위 4.5:1 이상이 되고 ② 짚어 본 낱말(.pick)은
           노랑 형광 위에 짙은 남색 글씨로 바꿔(인라인 색이 있어 !important)
           형광펜처럼 또렷해진다. 배경 강도는 14.39.6 계약 그대로 둔다 */
        .wf{border-radius:2px;padding:0 1px;transition:background .15s;}
        .wf.hot{background:transparent;}
        .wf.top{background:rgba(23,58,150,.09);}
        .wf.pick{background:rgba(250,204,21,.6);box-shadow:0 0 0 1px rgba(202,138,4,.65);
                 color:#1E3A8A !important;font-weight:800 !important;}
        .editor.wf-on .tb-content{cursor:default;}
        .editor.wf-on .tb-content a{color:inherit!important;}
        /* 분석 중 안내 띠 — 15.5.1 · 어두운 캔버스(#282828) 위에 떠야 하므로
           그림자를 두텁게 하고, 버튼은 테두리+굵기로 눈에 잡히게 한다 */
        .wf-bar{
            position:fixed;top:64px;left:50%;transform:translateX(-50%);z-index:1150;
            display:none;align-items:center;gap:10px;padding:8px 14px;
            background:var(--card);border:1px solid var(--border);border-radius:99px;
            box-shadow:0 4px 16px rgba(15,23,42,.35);font-size:13px;color:var(--text2);white-space:nowrap;
        }
        .wf-bar.show{display:flex;}
        .wf-bar b{color:var(--text1);}
        .wf-bar .scale{
            display:inline-block;width:78px;height:10px;border-radius:3px;
            /* WF_TIER 와 같은 3색 — 왼쪽=덜 중요·오른쪽=가장 중요 */
            background:linear-gradient(90deg,#2563EB,#1D4ED8,#11348A);
            box-shadow:inset 0 0 0 1px rgba(15,23,42,.2);
        }
        .wf-bar button{
            border:1px solid var(--border);background:var(--bg2);color:var(--text1);border-radius:6px;
            padding:4px 10px;font-size:12px;font-weight:600;cursor:pointer;
        }
        .wf-bar button:hover{background:var(--accent);border-color:var(--accent);color:#fff;}
        #wfTopLbl{font-size:12px;color:var(--text2);}
        /* 패널 목록 */
        .wf-item{
            display:flex;align-items:center;gap:7px;padding:6px 8px;border-radius:3px;
            cursor:pointer;font-size:12.5px;position:relative;overflow:hidden;
        }
        .wf-item:hover{background:var(--bg2);}
        .wf-item.on{background:rgba(250,204,21,.18);}
        .wf-item .bar{
            position:absolute;left:0;top:0;bottom:0;background:rgba(37,99,235,.13);
            border-radius:3px;pointer-events:none;
        }
        .wf-item .w{position:relative;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        /* 칠하지 않는 '그 밖의 낱말'은 목록에서도 조용하게 (15.5.1 · text3 은
           11~12px 작은 글씨에서 4.7:1 로 흐려 보이니 text2 로 한 칸 올려 준다) */
        .wf-item.dim{padding:5px 8px 5px 25px;font-size:12px;color:var(--text2);}
        .wf-item.dim .w{font-weight:500;color:var(--text2);}
        .wf-item .c{position:relative;margin-left:auto;font-size:11px;color:var(--text2);flex:none;}
        .sp-mini{
            width:20px;height:20px;border:1px solid var(--border);border-radius:3px;
            background:var(--bg2);color:var(--text2);cursor:pointer;font-size:11px;line-height:1;
        }
        .sp-mini:hover{border-color:var(--accent);color:var(--accent);}
        .wf-rank{
            position:relative;width:17px;flex:none;text-align:center;font-size:10px;
            color:var(--text2);font-weight:700;
        }
        /* 중요어 패널 머리: 버튼 하나 + 기준 조절만 */
        .wf-top{display:flex;align-items:center;gap:8px;padding:8px;}
        .wf-toggle{
            flex:1;display:flex;align-items:center;justify-content:center;gap:6px;height:34px;
            border:1px solid var(--border);border-radius:8px;background:var(--bg2);
            color:var(--text1);font-size:12.5px;font-weight:700;cursor:pointer;
        }
        .wf-toggle.on{background:var(--accent);border-color:var(--accent);color:#fff;}
        .wf-min{display:flex;align-items:center;gap:4px;font-size:11.5px;color:var(--text2);flex:none;}
        @media(max-width:820px){
            .side-bar{width:42px;}
            .editor.side-off .side-bar{margin-left:-42px;}
            /* 좁은 화면에선 패널이 종이를 밀지 않고 위에 겹쳐 뜬다 */
            .side-panel{
                position:absolute;left:42px;top:0;bottom:0;z-index:59;
                background:var(--card);box-shadow:6px 0 22px rgba(0,0,0,.16);
            }
            .side-panel.show{width:min(74vw,268px);}
            .editor.side-off .side-panel{left:0;margin-left:0;transform:translateX(-110%);}
        }
        @media(max-width:640px){
            .editor-body{padding:8px 4px 80px;padding-bottom:max(80px,env(safe-area-inset-bottom)) !important;
    overflow-anchor:none;
}
            .tb-group{padding:2px;border-radius:4px;}
            .tool-btn{width:38px;height:38px;font-size:19px;}   /* 손가락으로 누르기 쉽게 */
            .tool-sep{margin:0 2px;}
            .split-btn .main{min-width:34px;}
            #fsInput{width:38px !important;}
            .font-btn{max-width:150px;min-width:70px;}
            .font-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
            .font-menu{max-height:52vh;overflow:auto;min-width:180px;}
            /* 에디터 제목·툴바가 노치에 안 가리게 */
            .editor-toolbar{padding-top:max(7px,env(safe-area-inset-top)) !important;}
            /* 텍스트 상자 손잡이·삭제 버튼을 터치하기 좋게 확대 */
            .tb-move{width:28px;height:28px;left:-34px;top:-34px;font-size:15px;}
            .el-del{width:24px;height:24px;font-size:13px;top:-32px;right:-32px;}
            .handle{--hdl-sz:max(var(--hs,16px),calc(16px / var(--pz,1)));width:var(--hdl-sz);height:var(--hdl-sz);}
            .modal-box{max-width:94vw !important;padding:18px !important;}
            .ctx-menu{min-width:190px;}
            .ctx-item{padding:12px 14px;}      /* 터치 타깃 */
            /* 편집기 빠른 메뉴는 위 툴바 아래로 펼쳐진다. */
            .more-panel{
                right:0;left:0;top:max(50px,calc(env(safe-area-inset-top) + 48px));bottom:auto;width:100%;
                max-height:calc(100dvh - 58px - env(safe-area-inset-top));border-radius:0 0 16px 16px;
                padding-bottom:max(8px,env(safe-area-inset-bottom));
                animation:sheetDown .18s cubic-bezier(.4,0,.2,1);
            }
            @keyframes sheetDown{from{transform:translateY(-10px);opacity:.55}to{transform:none;opacity:1}}
            .more-grid button{min-height:70px;font-size:12px;}
            .more-tabs button{padding:10px 4px;font-size:13.5px;}
            /* 세로 도구막대는 기본으로 접어 둔다 — 화면을 넓게 */
            .side-bar{width:0;overflow:hidden;padding:0;border:none;}
            .side-open{display:none !important;}
            .side-panel{left:0 !important;}
            .side-panel.show{width:min(86vw,320px);}
        }
        /* 한 손가락 = 스크롤(브라우저), 두 손가락 = 확대(JS 가 처리).
           pinch-zoom 을 빼야 브라우저가 페이지째 확대하지 않는다. */
        .editor-body{touch-action:pan-x pan-y;
    overflow-anchor:none;
}
        .pages-stage{margin:0 auto;position:relative;overflow-anchor:none;}
        .page-wrap{position:absolute;left:0;top:0;transform-origin:top left;
                   contain:layout; isolation:isolate; overflow-anchor:none;
                   backface-visibility:hidden;}  /* will-change:transform 제거 → 확대 시 글자가 벡터로 재렌더링되어 또렷
                   isolation:isolate + overflow-anchor:none + backface-visibility:hidden → 빠른 스크롤 시 다른 페이지 글자 겹침(고스팅) 방지 */
        .page-label{
            position:absolute;top:-26px;left:2px;font-size:11px;color:var(--text3);
            display:flex;align-items:center;gap:8px;user-select:none;white-space:nowrap;
        }
        .page-del{
            border:none;background:transparent;color:var(--text3);cursor:pointer;
            font-size:13px;padding:2px 5px;border-radius:3px;display:flex;align-items:center;gap:3px;
        }
        .page-del:hover{background:rgba(231,76,60,.12);color:#e74c3c;}
        .page-del[disabled]{opacity:.3;cursor:not-allowed;}

        .paper{
            position:absolute;left:0;top:0;
            width:800px;height:1100px;padding:0;
            outline:1px solid var(--border);border:none;border-radius:0;
            /* 14.72.6 · 어두운 캔버스 위를 떠 있는 문서 느낌 — 그림자를 기존 --shadow 보다 살짝 강화 */
            box-shadow:var(--paper-shadow);box-sizing:border-box;overflow:hidden;
            contain:paint; isolation:isolate;
        }
        /* 현재 페이지는 실제 노출 면적 판정과 같은 focused 상태를 또렷하게 보여 준다.
           --pz 역수를 써서 확대/축소해도 테두리 굵기가 거의 일정하다. */
        .paper.focused{
            outline:calc(3px / var(--pz,1)) solid var(--accent);
            outline-offset:calc(3px / var(--pz,1));
            box-shadow:0 0 0 calc(7px / var(--pz,1)) rgba(79,110,247,.12),var(--shadow);
        }
        .page-wrap.focused .page-label{color:var(--accent);font-weight:800;}
        .page-wrap.focused .page-label>span{
            padding:3px 8px;border-radius:999px;background:rgba(79,110,247,.12);
        }

        .add-page-zone{
            position:absolute;left:0;
            border:2px dashed var(--border);border-radius:4px;background:transparent;
            display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
            color:var(--text3);cursor:pointer;transition:border-color .2s,color .2s,background .2s;
            font-size:13px;min-height:56px;box-sizing:border-box;
            white-space:nowrap;overflow:hidden;text-align:center;padding:6px;
        }
        .add-page-zone span{max-width:100%;overflow:hidden;text-overflow:ellipsis;}
        @media(max-width:640px){
            .add-page-zone{font-size:12px;gap:4px;}
            .add-page-zone i{font-size:18px !important;}
        }
        .add-page-zone:hover,.add-page-zone.near{border-color:var(--accent);color:var(--accent);background:rgba(79,110,247,.04);}

        /* ===== 페이지 내부 레이어 ===== */
        .layer{position:absolute;inset:0;pointer-events:none;}
        .layer>*{pointer-events:auto;}
        /* 20.0 · 읽기 우선 레이어 — 가져온 문서의 '쪽 그림' 한 장.
           편집 요소보다 뒤(z-index:1)에 있어, 요소가 올라오는 동안에도
           내용이 끊기지 않고 보이다가 renderPageEls 의 finish() 에서 걷힌다. */
        .layer-preview{z-index:1;pointer-events:none;}
        .page-preview-img{
            position:absolute;inset:0;width:100%;height:100%;
            object-fit:fill;display:block;user-select:none;-webkit-user-drag:none;pointer-events:none;
            /* 22.1 · 글자 DOM 이 이미 그 위에 깔린 뒤 래스터만 짧게 걷는다 —
               '그림 → 글자'가 한 프레임에 딱 바뀌지 않게(투명도 150ms). */
            transition:opacity .15s linear;
        }
        .page-preview-img.preview-fade{opacity:0;}
        /* 준비 중에도 그림은 글자 뒤(z-index:1)에 그대로 둔다. 먼저 붙은 글자
           몇 줄이 곧바로 보이고, 남은 줄은 그림이 대신 채운다. 덮개가 아니므로
           스크롤·선택을 막지 않는다. */
        /* 14.37.0 · 화면에 남는 것은 언제나 진짜 글자다. 그림은 글자가 붙기 전
           잠깐의 자리 채움이라, 준비 배지를 따로 띄우지 않는다. */
        /* 이미지가 가장 뒤, 그 위에 형광펜, 그 위에 글자, 펜 그림이 가장 앞.
           마우스로 칠하는 형광펜은 글자 위에 올라가면 획 가장자리가 글자를 뿌옇게
           덮으므로 layer-marker(글자보다 아래)에만 그린다. */
        .layer-fig{z-index:2;}
        /* 14.39.6 · PDF 원본 배경(isBg)·수식 조각(isMath) 전용 '가구' 층.
           이 둘은 사용자가 건드릴 수 없는 종이 인쇄물이라 항상 글자·수식 아래에
           둔다. 예전엔 layer-img 에 섞여 있어서, 사진을 하나만 선택해도
           (_layerLift 가 층째로 올리는 바람에) 원본 래스터와 흰 바탕 수식 조각이
           통째로 글자·수식 위로 떠올라 주변 수식이 사라져 보였다 (사용자 보고).
           DOM 순서가 layer-img 보다 앞서므로 같은 z-index 여도 항상 그 아래다. */
        .layer-fig>*{pointer-events:none!important;}
        .layer-img{z-index:2;}
        .layer-fill{z-index:3;pointer-events:none;}
        .layer-marker{z-index:3;pointer-events:none;}
        .layer-text{z-index:4;}
        .layer-stroke{z-index:5;}
        /* 레이어는 선택 여부와 무관하게 항상 보인다. 이미지 선택을 감시하는
           .paper:has(...) 후손 규칙은 쓰지 않는다. 무거운 쪽의 .sel 변경마다
           글자 수천 개의 스타일을 다시 계산하던 중복 안전망이었다. */
        .tb.sel,.tb.edit,.tb.msel{z-index:60!important;}
        .paper-img.sel,.paper-img.msel{z-index:60!important;}
        .stroke-g.sel,.stroke-g.msel{ }
        /* 이미지 선택 테두리·핸들은 배경 없이 악센트 선만 보이게 — 핸들이 주변 글/그림을
           가리지 않는다. */
        .paper-img.sel{background:transparent!important;box-shadow:none!important;}
        .paper-img.sel>img{background:transparent!important;}
        /* SVG 자체는 클릭을 통과시키고, 획의 hit 영역만 잡히게 한다 */
        .stroke-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;}
        .layer-stroke .stroke-g,.layer-marker .stroke-g{pointer-events:none;}
        .layer-stroke .stroke-hit,.layer-marker .stroke-hit{pointer-events:stroke;}
        .stroke-hit{fill:none;stroke:transparent;pointer-events:stroke;cursor:move;}
        .stroke-halo{fill:none;stroke:var(--accent);opacity:0;pointer-events:none;}
        .stroke-g.sel .stroke-halo{opacity:.32;}
        .draw-surface{position:absolute;inset:0;z-index:20;cursor:none;display:none;
            touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;}
        /* 14.68 · 수동 손바닥 차단(body.palm-strict)은 제거했다. 펜이 닿아 있는
           동안의 손가락/손바닥은 자동 손바닥 거부(10c)가 막는다. */

        /* ===== 표 조절 (열/행 경계를 끌어서 크기 변경) ===== */
        .layer-tbl{position:absolute;inset:0;z-index:45;pointer-events:none;}
        .layer-tbl>*{pointer-events:auto;}
        /* 표 감지 영역 — 가까이 가면 손잡이가 은은하게 나타난다 */
        .tbl-box{position:absolute;pointer-events:none;box-sizing:border-box;}
        /* 손잡이는 가까이 갔을 때(.near)나 선택했을 때(.on)만 눌린다 */
        .tbl-box .tbl-div,.tbl-box .tbl-h,.tbl-box .tbl-stretch{pointer-events:none;}
        /* 15.25.0 · 표 테두리 이동도 글상자처럼 '선택(.on)한 뒤'에만 잡힌다 */
        .tbl-box .tbl-edge{pointer-events:none;}
        .tbl-box.on .tbl-edge{pointer-events:auto;}
        .tbl-box.near .tbl-div,.tbl-box.on .tbl-div,
        .tbl-box.near .tbl-h,.tbl-box.on .tbl-h,
        .tbl-box.near .tbl-stretch,.tbl-box.on .tbl-stretch{pointer-events:auto;}
        .tbl-frame{
            position:absolute;inset:0;pointer-events:none;border-radius:2px;box-sizing:border-box;
            border:var(--bw,1.6px) solid transparent;transition:border-color .15s;
        }
        .tbl-box.near .tbl-frame,.tbl-box.on .tbl-frame{border-color:rgba(79,110,247,.55);}
        .tbl-box.on .tbl-frame{border-color:var(--accent);}
        /* 15.26 · 표 전체가 선택된 상태 — 테두리를 굵게 두 겹으로 그려 '표째 선택'을 알린다 */
        .tbl-box.on.whole .tbl-frame{
            border-color:var(--accent);
            box-shadow:0 0 0 calc(2px / var(--pz,1)) color-mix(in srgb,var(--accent) 30%,transparent),
                       inset 0 0 0 calc(2px / var(--pz,1)) color-mix(in srgb,var(--accent) 22%,transparent);
        }
        /* 15.26 · 표 이동 손잡이 — Word의 표 이동 손잡이와 같은 자리(왼쪽 위 바깥).
           표를 한 번 누르면(.on) 나타나고, 끌면 표가 통째로 움직인다. */
        .tbl-grip{
            position:absolute;display:none;align-items:center;justify-content:center;
            width:calc(26px / var(--pz,1));height:calc(26px / var(--pz,1));
            background:var(--card);border:calc(1.4px / var(--pz,1)) solid var(--accent);
            border-radius:calc(7px / var(--pz,1));color:var(--accent);
            font-size:calc(16px / var(--pz,1));line-height:1;cursor:move;z-index:8;
            box-shadow:0 calc(2px / var(--pz,1)) calc(7px / var(--pz,1)) rgba(15,23,42,.18);
            touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;
        }
        .tbl-grip i{pointer-events:none;}
        .tbl-box.on .tbl-grip{display:flex;pointer-events:auto;}
        .tbl-box.on.whole .tbl-grip{background:var(--accent);color:#fff;}
        .tbl-grip:hover{filter:brightness(1.06);}
        /* 표 테두리 이동 영역 — 보이는 이동 버튼 없이 텍스트 상자 가장자리처럼 잡는다.
           15.26 · 손가락으로도 잡히게 조금 넓히고(18px), 안쪽으로도 걸치게 했다. */
        .tbl-edge{position:absolute;z-index:2;background:transparent;}
        .tbl-edge.top{left:calc(12px / var(--pz,1));right:calc(12px / var(--pz,1));top:calc(-10px / var(--pz,1));height:calc(18px / var(--pz,1));cursor:move;}
        .tbl-edge.bottom{left:calc(12px / var(--pz,1));right:calc(12px / var(--pz,1));bottom:calc(-10px / var(--pz,1));height:calc(18px / var(--pz,1));cursor:move;}
        .tbl-edge.left{top:calc(12px / var(--pz,1));bottom:calc(12px / var(--pz,1));left:calc(-10px / var(--pz,1));width:calc(18px / var(--pz,1));cursor:move;}
        .tbl-edge.right{top:calc(12px / var(--pz,1));bottom:calc(12px / var(--pz,1));right:calc(-10px / var(--pz,1));width:calc(18px / var(--pz,1));cursor:move;}
        /* 열/행 경계 잡이 — 평소엔 투명, 닿으면 가는 선 하나만 */
        .tbl-div{position:absolute;background:transparent;transition:background .12s;z-index:3;}
        .tbl-div.col{cursor:col-resize;width:calc(var(--hs,12px)*0.7);top:0;}
        .tbl-div.row{cursor:row-resize;height:calc(var(--hs,12px)*0.7);left:0;}
        .tbl-div::after{
            content:'';position:absolute;background:var(--accent);opacity:0;transition:opacity .12s;
            border-radius:2px;
        }
        .tbl-div.col::after{left:50%;top:0;bottom:0;width:var(--bw,1.6px);transform:translateX(-50%);}
        .tbl-div.row::after{top:50%;left:0;right:0;height:var(--bw,1.6px);transform:translateY(-50%);}
        .tbl-div:hover::after{opacity:.9;}
        .tbl-div:active::after{opacity:1;}
        /* 꼭짓점 손잡이 — 버튼처럼 보이지 않는 ㄱ자 코너 그립, 가로·세로 자유 조절 */
        .tbl-h{
            position:absolute;width:calc(22px / var(--pz,1));height:calc(22px / var(--pz,1));
            transform:translate(-50%,-50%);border:0;background:transparent;box-shadow:none;border-radius:0;
            opacity:0;transition:opacity .15s,filter .12s;z-index:6;
        }
        .tbl-h::before,.tbl-h::after{
            content:'';position:absolute;background:var(--accent);border-radius:999px;
            box-shadow:0 0 0 calc(1px / var(--pz,1)) var(--card);
        }
        .tbl-h::before{width:calc(13px / var(--pz,1));height:calc(3px / var(--pz,1));}
        .tbl-h::after{width:calc(3px / var(--pz,1));height:calc(13px / var(--pz,1));}
        .tbl-h.nw::before{left:calc(2px / var(--pz,1));top:calc(2px / var(--pz,1));}
        .tbl-h.nw::after{left:calc(2px / var(--pz,1));top:calc(2px / var(--pz,1));}
        .tbl-h.ne::before{right:calc(2px / var(--pz,1));top:calc(2px / var(--pz,1));}
        .tbl-h.ne::after{right:calc(2px / var(--pz,1));top:calc(2px / var(--pz,1));}
        .tbl-h.sw::before{left:calc(2px / var(--pz,1));bottom:calc(2px / var(--pz,1));}
        .tbl-h.sw::after{left:calc(2px / var(--pz,1));bottom:calc(2px / var(--pz,1));}
        .tbl-h.se::before{right:calc(2px / var(--pz,1));bottom:calc(2px / var(--pz,1));}
        .tbl-h.se::after{right:calc(2px / var(--pz,1));bottom:calc(2px / var(--pz,1));}
        .tbl-box.near .tbl-h,.tbl-box.on .tbl-h{opacity:1;}
        .tbl-h:hover{filter:drop-shadow(0 1px 3px rgba(79,110,247,.45));}
        .tbl-h.nw{cursor:nwse-resize;} .tbl-h.se{cursor:nwse-resize;}
        .tbl-h.ne{cursor:nesw-resize;} .tbl-h.sw{cursor:nesw-resize;}
        /* 변 중앙 손잡이 — 버튼 모양을 없앤 두 줄 그립. 위·아래는 세로만, 좌·우는 가로만 조절 */
        .tbl-stretch{
            position:absolute;width:calc(28px / var(--pz,1));height:calc(28px / var(--pz,1));
            transform:translate(-50%,-50%);border:0;background:transparent;box-shadow:none;border-radius:0;
            opacity:0;transition:opacity .15s,filter .12s;pointer-events:none;z-index:5;
        }
        .tbl-stretch::before,.tbl-stretch::after{
            content:'';position:absolute;background:var(--accent);border-radius:999px;
            box-shadow:0 0 0 calc(1px / var(--pz,1)) var(--card);
        }
        .tbl-stretch.top::before,.tbl-stretch.bottom::before,
        .tbl-stretch.top::after,.tbl-stretch.bottom::after{
            left:50%;width:calc(18px / var(--pz,1));height:calc(3px / var(--pz,1));transform:translate(-50%,-50%);
        }
        .tbl-stretch.top::before,.tbl-stretch.bottom::before{top:calc(50% - 4px / var(--pz,1));}
        .tbl-stretch.top::after,.tbl-stretch.bottom::after{top:calc(50% + 4px / var(--pz,1));}
        .tbl-stretch.left::before,.tbl-stretch.right::before,
        .tbl-stretch.left::after,.tbl-stretch.right::after{
            top:50%;width:calc(3px / var(--pz,1));height:calc(18px / var(--pz,1));transform:translate(-50%,-50%);
        }
        .tbl-stretch.left::before,.tbl-stretch.right::before{left:calc(50% - 4px / var(--pz,1));}
        .tbl-stretch.left::after,.tbl-stretch.right::after{left:calc(50% + 4px / var(--pz,1));}
        .tbl-box.near .tbl-stretch,.tbl-box.on .tbl-stretch{opacity:.95;}
        .tbl-stretch:hover{opacity:1;filter:drop-shadow(0 1px 3px rgba(79,110,247,.45));}
        .tbl-stretch.top,.tbl-stretch.bottom{cursor:ns-resize;}
        .tbl-stretch.left,.tbl-stretch.right{cursor:ew-resize;}
        .tbl-edge,.tbl-div,.tbl-h,.tbl-stretch{   /* 15.26.1 · 표 이동 손잡이(.tbl-grip)는
               아래 자기 규칙에서 같은 선언을 갖는다 — 여기에 끼워 넣으면
               폰 레이아웃 계약(터치 손잡이 4종 선택자)이 깨진다 */
            touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;
        }
        /* 표 도구 막대 — 간소화 */
        .tbl-bar{
            position:fixed;z-index:1200;display:none;align-items:center;gap:4px;padding:6px 8px;
            background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 24px rgba(15,23,42,.14);
        }
        .tbl-bar.show{display:flex;}
        .tbl-bar button{
            width:32px;height:32px;display:flex;align-items:center;justify-content:center;
            border:none;background:transparent;color:var(--text2);border-radius:8px;cursor:pointer;font-size:16px;
        }
        .tbl-bar button:hover{background:var(--bg2);color:var(--text1);}
        .tbl-bar button.danger:hover{background:rgba(231,76,60,.12);color:#e74c3c;}
        .tbl-bar .sep{width:1px;height:18px;background:var(--border);margin:0 4px;flex:none;}
        .tbl-bar{padding:6px 8px;gap:4px;max-width:calc(100vw - 16px);overflow-x:auto;}
        #tblSelInfo{display:none!important;}
        .tbl-grip{display:none!important;}
        /* 15.27 · 칸 채우기 = 정해진 팔레트(글자색·형광펜과 같은 방식).
           예전엔 <input type="color"> 였다 → 아무 색이나 칠할 수 있어 문서마다
           색이 제각각이었다. 이제 버튼 아래에 10색 팔레트(#cellFillPop)가 뜨고,
           버튼에는 지금 칸 색을 얇은 띠로 보여 준다. */
        .tbl-color{position:relative;width:32px;height:32px;display:flex;align-items:center;justify-content:center;
            border:none;background:transparent;color:var(--text2);border-radius:8px;cursor:pointer;flex:none;font-size:16px;}
        .tbl-color:hover{background:var(--bg2);color:var(--text1);}
        .tbl-color .tbl-fill-chip{position:absolute;left:8px;right:8px;bottom:3px;height:3px;border-radius:999px;
            background:transparent;box-shadow:inset 0 0 0 1px rgba(15,23,42,.18);pointer-events:none;}
        /* 채운 칸을 고르면 그 색을 얇은 띠로 보여 준다 (실제 색은 인라인으로 온다) */
        .tbl-color .tbl-fill-chip.full{background:#fff7cc;}
        /* 15.26 · 지금 몇 칸(또는 표 전체)을 골랐는지 도구막대에 보여 준다 */
        .tbl-bar .tbl-sel-info{
            display:none;align-items:center;flex:none;height:22px;padding:0 7px;margin:0 3px;
            border-radius:999px;background:color-mix(in srgb,var(--accent) 14%,transparent);
            color:var(--accent);font-size:11px;font-weight:700;white-space:nowrap;
            font-variant-numeric:tabular-nums;
        }
        .tbl-bar .tbl-sel-info.show{display:flex;}

        /* ===== 문서 안에서 찾기 (Ctrl+F) ===== */
        .find-bar{
            position:fixed;top:64px;right:22px;z-index:1200;display:none;align-items:center;gap:5px;
            padding:6px 8px;background:var(--card);border:1px solid var(--border);
            border-radius:4px;box-shadow:var(--shadow);
        }
        .find-bar.show{display:flex;}
        .find-bar input{
            width:170px;height:30px;border:none;outline:none;background:transparent;
            color:var(--text1);font-size:13px;
        }
        .find-bar button{
            width:28px;height:28px;display:flex;align-items:center;justify-content:center;
            border:none;background:transparent;color:var(--text2);border-radius:3px;cursor:pointer;font-size:16px;
        }
        .find-bar button:hover{background:var(--bg2);color:var(--text1);}
        #findCount{font-size:11.5px;color:var(--text3);min-width:52px;text-align:center;white-space:nowrap;}
        .find-layer{position:absolute;inset:0;z-index:47;pointer-events:none;}
        .find-hit{position:absolute;background:rgba(250,204,21,.45);border-radius:2px;pointer-events:none;}
        .find-hit.cur{background:rgba(249,115,22,.6);box-shadow:0 0 0 1.5px #f97316;}

        /* ===== 페이지 이동 · 즐겨찾는 페이지 ===== */
        .page-jump{
            width:40px;height:28px;text-align:center;font-size:12px;
            border:1px solid var(--border);border-radius:3px;background:var(--bg2);
            color:var(--text1);outline:none;
        }
        .page-jump:focus{border-color:var(--accent);}
        #favBtn.active{background:rgba(245,158,11,.16);color:#f59e0b;box-shadow:none;}
        #favBtn.active:hover{background:rgba(245,158,11,.26);color:#f59e0b;}
        .page-fav{
            border:none;background:transparent;color:var(--text3);cursor:pointer;
            font-size:13px;padding:2px 5px;border-radius:3px;
        }
        .page-fav:hover{background:rgba(245,158,11,.14);color:#f59e0b;}
        .page-fav.on{color:#f59e0b;}
        .fav-pop{
            position:fixed;z-index:1460;display:none;min-width:230px;max-width:320px;max-height:290px;
            overflow:auto;padding:6px;background:var(--card);border:1px solid var(--border);
            border-radius:4px;box-shadow:var(--shadow);
        }
        .fav-pop.show{display:block;}
        .fav-item{
            display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:3px;
            cursor:pointer;font-size:12.5px;color:var(--text1);
            touch-action:pan-y;  /* 목록 스크롤은 허용, 꾹 누르면 드래그 */
            user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;
        }
        .fav-item:hover{background:var(--bg2);}
        .fav-drag{touch-action:none;cursor:grab;padding:2px;font-size:14px;}
        /* 드래그 다중 선택 박스 */
        .marquee{
            position:absolute;z-index:30;pointer-events:none;
            border:1.5px solid var(--accent);
            background:rgba(79,110,247,.12);border-radius:2px;
        }
        .paper-img.msel{outline:max(var(--bw,2px),calc(2px / var(--pz,1))) solid var(--accent);outline-offset:calc(1px / var(--pz,1));}
        .tb.msel{outline:max(var(--bw,2px),calc(2px / var(--pz,1))) solid var(--accent);outline-offset:calc(1px / var(--pz,1));}
        .stroke-g.msel .stroke-halo{opacity:.32;}
        .paper.drawing .draw-surface{display:block;z-index:110!important;pointer-events:auto;cursor:none!important;}
        .paper.drawing .layer-tbl,.paper.drawing .find-layer{display:none;}
        /* 정렬 안내선 */
        .snap-line{
            position:absolute;background:#ff3b8d;z-index:40;pointer-events:none;
            box-shadow:0 0 4px rgba(255,59,141,.65);
        }
        .snap-line.v{width:1px;top:0;bottom:0;}
        .snap-line.h{height:1px;left:0;right:0;}
        .snap-line.center{background:#8b5cf6;box-shadow:0 0 4px rgba(139,92,246,.65);}
        .snap-badge{
            position:fixed;z-index:1300;background:#ff3b8d;color:#fff;font-size:10px;font-weight:700;
            padding:2px 7px;border-radius:3px;pointer-events:none;transform:translate(-50%,-140%);
            box-shadow:0 2px 8px rgba(0,0,0,.25);
        }

        .paper-img{
            position:absolute;cursor:move;border:var(--bw,2px) solid transparent;border-radius:2px;
            user-select:none;box-sizing:border-box;touch-action:none;
        }
        .tb.sdy-dragging,.tb.sdy-resizing,.paper-img.sdy-dragging,.paper-img.sdy-resizing,
        .latex-box.sdy-dragging,.latex-box.sdy-resizing{
            will-change:transform;backface-visibility:hidden;transform-style:preserve-3d;
            transition:none!important;z-index:80!important;
        }
        body.sdy-editor-gesturing,body.sdy-editor-gesturing .tb-content{
            user-select:none!important;-webkit-user-select:none!important;-webkit-touch-callout:none!important;
        }
        /* 15.10 · 그림은 **테두리 상자 전체**를 채운다.
           .paper-img 는 box-sizing:border-box + 투명 테두리(--bw)라, 내용 상자에
           그림을 채우면 그림이 테두리 두께만큼(100% 화면에서 1.6px) 안쪽으로
           밀리고 3.2px 줄어든다 — 가져온 그림·표 스냅샷·쪽 배경이 라이브 글자와
           어긋나 보이던 원인이다(실측: 쪽 배경이 위·아래 끝에서 ±1.6px, 그림
           아래끝 1.6px). 테두리는 선택 표시용이라 보이는 자리와 무관하므로,
           내용 상자가 아니라 테두리 상자에 맞춘다(위치·크기가 데이터 그대로). */
        .paper-img>img{position:absolute;left:calc(var(--bw,2px)*-1);top:calc(var(--bw,2px)*-1);
            width:calc(100% + var(--bw,2px)*2);height:calc(100% + var(--bw,2px)*2);
            display:block;object-fit:fill;pointer-events:none;border-radius:2px;}
        /* 15.42.13 · .paper-img>img 가 position:absolute 로 테두리 상자 전체를 덮으므로
           부모의 border-color 만 바꾸면 불투명 그림에 가려 확대 전엔 거의 보이지 않는다.
           데이터 사각형(15.10)은 그대로 두고, 그림 위(z-index:6 · outline)에 배율 보정된
           선택 테두리와 흰 대비 테를 얹어 어떤 배율·배경에서도 선명하게 보이게 한다. */
        .paper-img.sel{
            border-color:var(--accent);
            outline:max(var(--bw,2px),calc(2.2px / var(--pz,1))) solid var(--accent);
            outline-offset:calc(-1 * max(var(--bw,2px),calc(2.2px / var(--pz,1))));
        }
        .paper-img.sel:not(.pending)::after{
            content:'';position:absolute;inset:calc(var(--bw,2px)*-1);
            border:max(var(--bw,2px),calc(2.2px / var(--pz,1))) solid var(--accent);
            border-radius:2px;box-sizing:border-box;
            box-shadow:0 0 0 calc(1px / var(--pz,1)) rgba(255,255,255,.94),
                       inset 0 0 0 calc(1px / var(--pz,1)) rgba(255,255,255,.86);
            pointer-events:none;z-index:6;
        }
        /* --hdl-sz: 확대하지 않은 축소 배율(pageScale<1)에서도 화면상 항상 14px 이상 유지 */
        .handle{
            --hdl-sz:max(var(--hs,12px),calc(14px / var(--pz,1)));
            position:absolute;box-sizing:border-box;touch-action:none;
            width:var(--hdl-sz);height:var(--hdl-sz);background:var(--accent);
            border:max(calc(var(--hdl-sz)/6),calc(2.2px / var(--pz,1))) solid var(--card,#fff);border-radius:50%;
            box-shadow:0 0 0 calc(1px / var(--pz,1)) rgba(15,23,42,.28),
                       0 calc(2px / var(--pz,1)) calc(5px / var(--pz,1)) rgba(15,23,42,.32);
            display:none;z-index:8;
            -webkit-user-select:none;user-select:none;-webkit-touch-callout:none;
        }
        .handle::before{
            content:'';position:absolute;
            inset:calc(var(--hdl-sz,14px)*-0.45);border-radius:50%;
        }
        .tb.edit>.handle::before{inset:calc(var(--hdl-sz,14px)*-0.2);}

        .paper-img.sel .handle,.tb.sel .handle,.tb.edit .handle{display:block;}
        .h-nw,.h-ne,.h-sw,.h-se{z-index:9;}
        .h-se{right:calc(var(--hdl-sz)/-2);bottom:calc(var(--hdl-sz)/-2);cursor:nwse-resize;}
        .h-nw{left:calc(var(--hdl-sz)/-2);top:calc(var(--hdl-sz)/-2);cursor:nwse-resize;}
        .h-ne{right:calc(var(--hdl-sz)/-2);top:calc(var(--hdl-sz)/-2);cursor:nesw-resize;}
        .h-sw{left:calc(var(--hdl-sz)/-2);bottom:calc(var(--hdl-sz)/-2);cursor:nesw-resize;}
        .h-e{right:calc(var(--hdl-sz)/-2);top:50%;margin-top:calc(var(--hdl-sz)/-2);cursor:ew-resize;}
        .h-w{left:calc(var(--hdl-sz)/-2);top:50%;margin-top:calc(var(--hdl-sz)/-2);cursor:ew-resize;}
        .h-s{bottom:calc(var(--hdl-sz)/-2);left:50%;margin-left:calc(var(--hdl-sz)/-2);cursor:ns-resize;}
        .h-n{top:calc(var(--hdl-sz)/-2);left:50%;margin-left:calc(var(--hdl-sz)/-2);cursor:ns-resize;}
        .paper-img>.h-se{right:calc(var(--hdl-sz)/-2 - var(--bw,2px));bottom:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-nw{left:calc(var(--hdl-sz)/-2 - var(--bw,2px));top:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-ne{right:calc(var(--hdl-sz)/-2 - var(--bw,2px));top:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-sw{left:calc(var(--hdl-sz)/-2 - var(--bw,2px));bottom:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-e{right:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-w{left:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-s{bottom:calc(var(--hdl-sz)/-2 - var(--bw,2px));}
        .paper-img>.h-n{top:calc(var(--hdl-sz)/-2 - var(--bw,2px));}

        /* 테두리(꼭짓점·변중앙 제외)를 잡으면 이동 */
        .tb-edge{
            --edge-t:max(10px,calc(10px / var(--pz,1)));
            position:absolute;display:none;z-index:4;   /* 손잡이(z8)보다 아래 */
            touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;
        }
        .tb.sel .tb-edge,.tb.edit .tb-edge,.paper-img.sel .tb-edge{display:block;}
        .tb-edge.top   {left:0;right:0;top:calc(var(--edge-t)/-2);height:var(--edge-t);cursor:move;}
        .tb-edge.bottom{left:0;right:0;bottom:calc(var(--edge-t)/-2);height:var(--edge-t);cursor:move;}
        .tb-edge.left  {top:0;bottom:0;left:calc(var(--edge-t)/-2);width:var(--edge-t);cursor:move;}
        .tb-edge.right {top:0;bottom:0;right:calc(var(--edge-t)/-2);width:var(--edge-t);cursor:move;}
        .lock-ratio-badge{  /* 미사용 (우클릭 메뉴로 대체) */
            display:none!important;
            position:absolute;left:-9px;top:-9px;width:20px;height:20px;border-radius:50%;
            background:var(--card);color:var(--text2);border:1px solid var(--border);
            display:none;align-items:center;justify-content:center;cursor:pointer;font-size:10px;z-index:6;
        }
        .paper-img.sel .lock-ratio-badge{display:flex;}
        .lock-ratio-badge.on{background:var(--accent);color:#fff;border-color:var(--accent);}
        .el-del{
            position:absolute;top:-28px;right:-28px;width:20px;height:20px;background:#e74c3c;
            border-radius:50%;color:#fff;font-size:11px;display:none;align-items:center;
            justify-content:center;cursor:pointer;z-index:9;
        }
        .paper-img.sel .el-del,.tb.sel .el-del,.tb.edit .el-del{display:flex;}

        .tb{position:absolute;z-index:4;touch-action:none;}
        .tb-move{
            position:absolute;left:-30px;top:-30px;width:24px;height:24px;border-radius:3px;
            background:#6b7280;color:#fff;display:none;align-items:center;justify-content:center;
            cursor:move;font-size:13px;z-index:7;box-shadow:0 2px 6px rgba(55,65,81,.35);
            border:2px solid var(--card);transition:transform .12s ease,background .15s;
            touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;
        }
        .tb-move:hover{background:#4b5563;}
        .dark .tb-move:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#9ca3af;}
        .tb-move:hover{transform:scale(1.15);}
        .tb-move:active{transform:scale(.94);}
        .tb.sel .tb-move,.tb.edit .tb-move{display:flex;}
        /* 상자 안쪽은 항상 '글자 선택' 영역 — 이동은 손잡이로만 */
        .tb .tb-content{cursor:text;}
        /* 15.25.0 · 읽기 선택 — 편집 상자를 띄우지 않고 글자 위를 끌어 고르는 동안·고른 뒤
           그 종이의 글 몸체만 선택 하이라이트를 그릴 수 있게 연다(크롬 PDF 뷰어처럼). */
        .paper.sdy-read-sel .layer-text .tb:not(.latex-box)>.tb-content{-webkit-user-select:text;user-select:text;}
        body.sdy-read-selecting,body.sdy-read-selecting *{cursor:text!important;}
        /* 15.35.1 · 가져온(tight) 상자의 읽기 선택 띠 — 네이티브 ::selection 은
           단어 사이 .zsp 공백 조각을 (상자 칠+글자 칠로) 두 번 칠해 띄어쓰기마다
           파란 띠가 진해 보였다(보고: "두 개가 겹치는 느낌"). 이 상자 안에서만
           네이티브 칠을 숨기고, 08a 가 같은 사각형을 줄별로 겹쳐 합쳐 단 한 겹
           그린다(svg.sdy-rsel-layer). 선택 데이터(복사·toString)는 그대로 네이티브. */
        .paper.sdy-read-sel .tb.tight:not(.edit) .tb-content::selection,
        .paper.sdy-read-sel .tb.tight:not(.edit) .tb-content ::selection{
            background:transparent;color:inherit;
        }
        .tb .sdy-rsel-layer{position:absolute;left:0;top:0;width:1px;height:1px;overflow:visible;pointer-events:none;z-index:-1;}
        /* 들여쓰기(탭) 단위 — 커서 폰트 크기에 비례한 고정 폭. 글자가 아니라
           '한 번에 지워지는' 스팬이라 Backspace 로 단위째 빠진다. */
        .tb-content .sdy-tab{display:inline-block;width:2.5em;overflow:hidden;white-space:nowrap;}
        .tb-content sup,.tb-content sub{
            font-size:.72em;line-height:0;position:relative;vertical-align:baseline;
        }
        .tb-content sup{top:-.45em;}
        .tb-content sub{bottom:-.22em;}
        /* PDF 원본 배경 — 맨 뒤에 깔고 건드리지 않는다 */
        .paper-img.pdf-bg{ z-index:0!important; pointer-events:none!important; }
        /* 쪽 배경도 같은 규칙(테두리 상자 전체) — 크기는 위 .paper-img>img 가 정한다. */
        .paper-img.pdf-bg img{ object-fit:fill; }
        /* LaTeX 수식 — PDF 수식 사진과 텍스트가 이중으로 겹치지 않게 단일 요소로 렌더 */
        .latex-box{position:absolute;z-index:5;cursor:move;}
        .latex-content{width:100%;height:100%;display:flex;align-items:flex-end;padding:0 4px 1px;
            overflow:visible;box-sizing:border-box;color:var(--text1);background:transparent;
            border:var(--bw,2px) solid transparent;border-radius:5px;white-space:nowrap;}
        .latex-box.display-math .latex-content{justify-content:center;align-items:center;padding:1px 4px;}
        /* 9.0 · PDF에서 가져온 수식 — 원문이 있던 자리에 딱 맞게, 겹침 없이
           ① 여백 0: 상자가 옆 글자 위로 넘어가지 않는다
           ② 인라인 수식은 글줄 베이스라인에 맞춰 가운데 정렬
           ③ 클릭은 수식 잉크에만 반응(상자 빈 공간은 통과) → 본문 선택을 안 뺏는다 */
        .latex-box.imported{z-index:6;}
        /* 10.0 · 수식이 상자보다 커도 자르지 않고 전부 보이게 한다.
           (기존 overflow:hidden — 상자 밖으로 삐져나온 큰 수식이 잘려 보였다)
           14.39.6 · 보고(26.09.08) — '수식상자 바깥으로 수식이 나가면 사라짐'.
           이 규칙에 overflow:hidden 이 남아 있어 상자를 줄이는 등 수식이 상자
           밖으로 나가면 삐져나온 부분이 잘려 없어 보였다. 글상자(.tb-content)는
           overflow:visible 로 글자가 절대 안 잘리므로, 수식도 같은 규칙으로 둔다. */
        /* 15.10 · 가져온 수식은 테두리를 두르지 않는다 — .latex-content 의 투명
           테두리(--bw, 100% 화면에서 1.6px)가 내용 상자를 안쪽으로 밀어 수식
           잉크를 오른쪽으로 1.6px 밀어놓았다(파서가 담은 상자 = 원문 잉크
           사각형). 테두리 대신 바깥선(outline)으로 선택을 보인다. */
        .latex-box.imported>.latex-content{padding:0;border-width:0;overflow:visible;align-items:center;color:#000000;}
        /* 가져온 인라인 수식도 테마 글자색(--text1)을 물려받지 않는다.
           어두운 화면에서 검정 수식이 회색으로 씻기는 것을 막는다. 원문 색은
           스팬 style 이 이 규칙보다 우선한다. */
        .tb.pdf-text .imath.imath-imp{color:#000000;}
        /* The UI's universal * rule otherwise paints unclassified KaTeX spans
           (digits, relations, operators and fraction scripts) in Jua. Inherit
           within KaTeX; its more-specific Math/AMS/Size faces still win. */
        .katex *{font-family:inherit;}
        /* Set the source face on the root as well as letter atoms: bare digits
           and operators inherit from the root. Explicit mathbb/mathcal/texttt
           and extensible symbols keep their own KaTeX fonts. */
        .sdy-math-times .katex,
        .sdy-math-times .katex .mathnormal,
        .sdy-math-times .katex .mathit,
        .sdy-math-times .katex .mathrm,
        .sdy-math-times .katex .mathbf,
        .sdy-math-times .katex .text{font-family:'Times New Roman','Liberation Serif','SDY Times',serif !important;}
        .sdy-math-arial .katex,
        .sdy-math-arial .katex .mathnormal,
        .sdy-math-arial .katex .mathit,
        .sdy-math-arial .katex .mathrm,
        .sdy-math-arial .katex .mathbf,
        .sdy-math-arial .katex .text{font-family:Arial,Helvetica,'Liberation Sans','SDY Helvetica',sans-serif !important;}
        .sdy-math-mono .katex,
        .sdy-math-mono .katex .mathnormal,
        .sdy-math-mono .katex .mathit,
        .sdy-math-mono .katex .mathrm,
        .sdy-math-mono .katex .mathbf,
        .sdy-math-mono .katex .text{font-family:'Courier New','Liberation Mono',monospace !important;}
        .sdy-math-myeongjo .katex,
        .sdy-math-myeongjo .katex .mathnormal,
        .sdy-math-myeongjo .katex .mathit,
        .sdy-math-myeongjo .katex .mathrm,
        .sdy-math-myeongjo .katex .mathbf,
        .sdy-math-myeongjo .katex .text{font-family:'Nanum Myeongjo',serif !important;}
        .sdy-math-pretendard .katex,
        .sdy-math-pretendard .katex .mathnormal,
        .sdy-math-pretendard .katex .mathit,
        .sdy-math-pretendard .katex .mathrm,
        .sdy-math-pretendard .katex .mathbf,
        .sdy-math-pretendard .katex .text{font-family:'Pretendard Variable','Pretendard',sans-serif !important;}
        /* Cambria Math is proprietary: use the installed face, otherwise the
           bundled KaTeX math fonts, without pretending to have embedded it. */
        .sdy-math-cambriamath .katex,
        .sdy-math-cambriamath .katex .mathit,
        .sdy-math-cambriamath .katex .mathrm,
        .sdy-math-cambriamath .katex .mathbf,
        .sdy-math-cambriamath .katex .text{font-family:'Cambria Math',KaTeX_Main,serif !important;}
        .sdy-math-cambriamath .katex .mathnormal{font-family:'Cambria Math',KaTeX_Math,serif !important;}
        .sdy-math-bold .katex .mathnormal,
        .sdy-math-bold .katex .mathit,
        .sdy-math-bold .katex .mathrm,
        .sdy-math-bold .katex .textsf,
        .sdy-math-bold .katex .texttt,
        .sdy-math-bold .katex .text{font-weight:700 !important;}
        .sdy-math-up .katex .mathnormal,
        .sdy-math-up .katex .mathit{font-style:normal !important;}
        .latex-box.imported.display-math>.latex-content{padding:0;justify-content:center;}
        .latex-box.imported.sel>.latex-content,.latex-box.imported.msel>.latex-content{
            outline:1px solid var(--accent);}
        .latex-box.imported:not(.sel):not(.msel)>.latex-content{pointer-events:none;}
        .latex-box.imported .katex{line-height:1.05;}
        .latex-box.imported .katex-display{margin:0!important;}
        .latex-box.sel .latex-content,.latex-box.msel .latex-content{
            border-color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,transparent);}
        .latex-box .latex-fallback{font-family:'Times New Roman',serif;font-size:inherit;white-space:pre-wrap;}
        .latex-box .katex{font-size:1em;}
        .latex-box .handle,.latex-box .tb-edge{display:none;}
        .latex-box.sel .handle,.latex-box.msel .handle,.latex-box.sel .tb-edge{display:block;}
        .latex-box .latex-edit{
            position:absolute;right:-8px;top:-26px;display:none;height:22px;padding:0 7px;
            align-items:center;gap:4px;border:0;border-radius:7px;background:var(--accent);color:#fff;
            font-size:10px;cursor:pointer;z-index:9;box-shadow:0 3px 9px rgba(79,110,247,.3);}
        .latex-box.sel .latex-edit{display:flex;}
        /* 구버전에서 이미 저장된 수식 이미지는 불투명 바탕으로 한 번만 보이게 한다. */
        .paper-img.math{z-index:45!important;pointer-events:none!important;background:#fff;}
        .paper-img.math img{background:#fff;}
        .paper-img.math .handle,.paper-img.math .tb-edge,.paper-img.math .lock-badge{display:none!important;}
        .latex-modal-box{max-width:560px;padding:0!important;overflow:hidden;}
        .latex-modal-head{display:flex;align-items:center;padding:14px 15px;border-bottom:1px solid var(--border);}
        .latex-modal-head>div{display:flex;align-items:center;gap:8px;flex:1}.latex-modal-head>div>i{color:var(--accent);font-size:19px;}
        .latex-modal-head b{font-size:15px}.latex-modal-head span{font-size:10px;color:var(--text3);padding:2px 6px;border-radius:6px;background:var(--bg2);}
        .latex-modal-head button{width:30px;height:30px;border:0;border-radius:8px;background:transparent;color:var(--text3);cursor:pointer;}
        .latex-input{display:block;width:calc(100% - 28px);height:100px;margin:14px;padding:12px;border:1px solid var(--border);border-radius:11px;
            resize:vertical;outline:none;background:var(--bg2);color:var(--text1);font:13px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;}
        .latex-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent);}
        .latex-examples{display:flex;gap:6px;padding:0 14px;overflow-x:auto}.latex-examples button{border:1px solid var(--border);background:var(--card);color:var(--text2);
            padding:6px 9px;border-radius:8px;font-size:10.5px;white-space:nowrap;cursor:pointer;}
        .latex-preview{margin:12px 14px 8px;min-height:86px;padding:14px;border:1px dashed color-mix(in srgb,var(--accent) 35%,var(--border));
            border-radius:12px;background:color-mix(in srgb,var(--accent) 4%,var(--card));display:flex;align-items:center;justify-content:center;
            overflow-x:auto;color:var(--text2);font-size:18px;}
        .latex-display-row{display:flex;align-items:center;gap:8px;margin:0 16px 12px;font-size:11.5px;color:var(--text2);}
        .latex-modal-actions{display:flex;justify-content:flex-end;gap:7px;padding:11px 14px;border-top:1px solid var(--border);}
        .latex-modal-actions button{border:1px solid var(--border);background:var(--bg2);color:var(--text1);border-radius:9px;padding:9px 14px;font-size:12px;font-weight:700;cursor:pointer;}
        .latex-modal-actions button.primary{background:var(--accent);border-color:var(--accent);color:#fff;display:flex;align-items:center;gap:5px;}
        @media(max-width:640px){.latex-modal-box{width:calc(100vw - 16px)!important}.latex-input{height:120px}.latex-preview{min-height:100px}}
        /* 14.39.2 · 표 크기 모달 — 브라우저 prompt 대신 앱 모달로 통일. 수식 넣기와 같은
           머리글(아이콘·제목·배지·닫기)·행/열 스피너·아래 단추(취소·넣기) 구조를 쓴다. */
        .tblsize-box{max-width:340px;padding:0!important;overflow:hidden;}
        .tblsize-head{display:flex;align-items:center;padding:14px 15px;border-bottom:1px solid var(--border);}
        .tblsize-head>div{display:flex;align-items:center;gap:8px;flex:1}
        .tblsize-head>div>i{color:var(--accent);font-size:19px;}
        .tblsize-head b{font-size:15px}
        .tblsize-head span{font-size:10px;color:var(--accent);font-weight:700;padding:2px 6px;border-radius:6px;background:var(--bg2);}
        .tblsize-head button{width:30px;height:30px;border:0;border-radius:8px;background:transparent;color:var(--text3);cursor:pointer;}
        .tblsize-head button:hover{background:var(--bg2);color:var(--text1);}
        /* 격자 프리셋 — Word·노션의 '격자 위에서 크기 고르기' 그대로. 칸 위를 지나면
           그때그때 만들어질 행×열이 채워져 보이고, 누르면 그 크기가 정해진다. */
        .tblsize-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:4px;padding:14px 15px 6px;}
        .ts-cell{height:20px;border:1px solid var(--border);border-radius:3px;background:var(--bg2);cursor:pointer;transition:background .06s,border-color .06s;}
        .ts-cell.on{background:var(--accent);border-color:var(--accent);opacity:.86;}
        .tblsize-hint{padding:0 15px 10px;font-size:10.5px;color:var(--text3);}
        .tblsize-steppers{display:flex;gap:10px;padding:0 15px 14px;}
        .tblsize-step{flex:1;display:flex;align-items:center;gap:8px;border:1px solid var(--border);border-radius:10px;padding:7px 9px;background:var(--bg2);}
        .tblsize-step span{font-size:11.5px;color:var(--text2);}
        .tblsize-step b{flex:1;text-align:center;font-size:14px;color:var(--text1);font-variant-numeric:tabular-nums;}
        .tblsize-step button{width:26px;height:26px;flex:none;border:1px solid var(--border);border-radius:7px;background:var(--card);color:var(--text1);cursor:pointer;font-size:14px;line-height:1;}
        .tblsize-step button:hover{border-color:var(--accent);color:var(--accent);}
        .tblsize-actions{display:flex;justify-content:flex-end;gap:7px;padding:11px 14px;border-top:1px solid var(--border);}
        .tblsize-actions button{border:1px solid var(--border);background:var(--bg2);color:var(--text1);border-radius:9px;padding:9px 14px;font-size:12px;font-weight:700;cursor:pointer;}
        .tblsize-actions button.primary{background:var(--accent);border-color:var(--accent);color:#fff;display:flex;align-items:center;gap:5px;}
        @media(max-width:640px){
          .tblsize-box{width:calc(100vw - 16px)!important}
          .ts-cell{height:26px}                     /* 터치 히트 영역 확보 */
          .tblsize-step button{width:34px;height:34px}
          .tblsize-actions button{min-height:44px;} /* 터치에서도 누르기 쉬운 단추 */
        }
        .tb-content{overflow-wrap:break-word;
            width:100%;height:100%;min-width:60px;min-height:28px;padding:8px 12px;
            border:var(--bw,2px) solid transparent;border-radius:3px;background:transparent;
            outline:none;white-space:pre-wrap;word-break:break-word;overflow:visible;
            cursor:text;color:var(--text1);user-select:none;line-height:1.5;box-sizing:border-box;
            /* 14.39.10 · 글상자 본문은 '보통 흐름(block)'이다.
               예전엔 세로 중앙 정렬을 위해 .tb-content 자체를 flex 컬럼으로 뒀는데,
               그러면 (1) 글이 언제나 상자 세로 중앙에서 시작하고,
               (2) 입력 도중 만들어지는 인라인 서식 span(.sdy-type 등)이
                   flex '아이템'이 되어 줄이 강제로 바뀌고 서식이 끊겨 보였다.
               세로 중앙 정렬은 '내용이 빈 새 상자'에도 적용하지 않는다(아래 14.39.11 규칙). */
            display:block;
        }
        /* 14.39.11 · 빈 일반 글상자의 안내문("텍스트 입력")·캐럿도 상자 세로 중앙이
           아니라 '실제로 글이 입력될 자리'(왼쪽 위)에 둔다. 상자가 아무리 커도
           중앙에 뜨면 실제 입력은 위에서 시작돼 자리가 어긋나 보였다.
           글자는 입력되면 data-empty 가 지워지며 보통 흐름(왼쪽 위)으로 간다 —
           안내문도 처음부터 같은 자리·같은 글자 크기로 놓는다.
           (표 칸은 아래 .in-tbl 규칙이 세로 중앙 정렬을 그대로 유지한다.) */
        .tb:not(.in-tbl) .tb-content[data-empty="true"]{
            display:block;justify-content:normal;
        }
        /* 10.0 · 선택/편집 중에도 상자 속 빈 공간을 흰 바탕으로 채우지 않는다.
           (예전: 편집 중 background:rgba(255,255,255,.97) — 옆의 그림·수식을 가렸다.
            이제 테두리+옅은 물결 틴트만 남기고 모두 투명하게 비친다) */
        .tb.sel .tb-content{border-color:var(--accent);background:transparent;}
        .tb.edit .tb-content{border-color:var(--accent);background:transparent;cursor:text;user-select:text;
            box-shadow:0 2px 10px rgba(55,65,81,.12);}
        .dark .tb.edit .tb-content:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:transparent;border-color:var(--accent);}
        .dark .tb.sel .tb-content:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:var(--accent);background:transparent;}
        .tb-content[data-empty="true"]::before{
            content:"텍스트 입력";color:var(--text3);opacity:.55;font-style:italic;
        }
        /* 편집 중에는 플레이스홀더를 숨겨 커서가 "텍스트 입력" 글자 뒤로 가는 현상 방지 */
        .tb.edit .tb-content[data-empty="true"]::before{
            content:none;
        }
        /* 표 칸 글자는 칸 밖으로 나가지 않는다 */
        .tb.in-tbl .handle, .tb.in-tbl .tb-edge{display:none!important;}
        .tb.in-tbl .tb-content{
            overflow:hidden;white-space:normal;overflow-wrap:break-word;word-break:break-word;
            display:flex;flex-direction:column;justify-content:center;
            padding:6px 8px;box-sizing:border-box;
        }
        /* 15.26 · 편집에 들어가도 '처음 보이던 자리' 그대로 — 세로 정렬(flex)과
           가로 정렬(text-align)이 편집 모드에서 풀려 글자가 왼쪽 위로 튀지 않게 한다.
           (예전: display:block 으로 바뀌며 가운데 정렬이 사라졌다)
           빈 칸은 캐럿이 확실히 보이도록 왼쪽 위에서 시작한다. */
        .tb.in-tbl.edit .tb-content{display:flex;flex-direction:column;overflow:auto;}
        .tb.in-tbl.edit .tb-content[data-empty="true"]{display:block;}
        /* Word처럼 드래그한 직사각형 셀 범위. 선택 테두리는 안쪽 콘텐츠가 아니라
           셀 외곽에 inset outline 으로 그린다. PDF 표의 .tb-content 는 position:relative
           안에 원문 좌표의 absolute span 을 두므로, border-width 를 0→2px 로 바꾸면
           containing block 원점이 밀려 글자가 아래로 내려간다. 일반 표도 같은 표시를
           써서 가져온 표와 선택 UI 를 통일하고, 편집 중에도 셀 내용 좌표를 보존한다.
           15.26 · 배경색(칸 채우기) 위에서도 선택선은 또렷하게 보인다. */
        .tb.in-tbl.tbl-cell-sel{z-index:61!important;}
        .tb.in-tbl.tbl-cell-sel,
        .tb.in-tbl.tbl-cell-anchor,
        .tb.in-tbl.sel,
        .tb.in-tbl.edit{
            outline:2px solid var(--accent);
            outline-offset:-2px;
        }
        .tb.in-tbl.tbl-cell-sel .tb-content,
        .tb.in-tbl.tbl-cell-anchor .tb-content,
        .tb.in-tbl.sel .tb-content,
        .tb.in-tbl.edit .tb-content{
            border-color:transparent!important;
            border-style:solid!important;
        }
        .tb.in-tbl.tbl-cell-sel .tb-content,
        .tb.in-tbl.tbl-cell-anchor .tb-content{
            background-image:none!important;
            box-shadow:none!important;
        }
        /* 표 칸은 비어 있어도 안내문·점선을 띄우지 않는다 */
        .tb.in-tbl:not(.edit) .tb-content[data-empty="true"]::before{content:"";}
        .tb.in-tbl:not(.edit):not(.sel):not(.tbl-cell-sel) .tb-content{border-color:transparent!important;}
        /* PDF 줄 단위 텍스트 — 내부 절대좌표 스팬이 단어 위치를 보존 */
        .tb.tight .tb-content{
            padding:0;min-width:0;min-height:0;line-height:1;
            white-space:normal;word-break:normal;overflow-wrap:normal;
            position:relative;   /* overflow는 visible 유지 — 글자 절대 안 잘림 */
            display:block;       /* 절대좌표 span 과 flex 충돌 방지 */
        }
        /* The global * rule sets a UI font on EVERY span. Imported words must
           inherit the document font unless they explicitly carry a source face.
           15.11 · 인라인 수식(.imath) 속은 제외한다 — 그 안의 KaTeX 전용
           글꼴(KaTeX_Main·KaTeX_Math…)을 이 상속이 덮어쓰면 수식 모양이
           본문 글꼴로 뭉개진다. */
        .tb.tight .tb-content :where(span,b,i,sup,sub):not(:is(.imath,.imath *)){font-family:inherit;}
        /* 같은 뿌리의 문제 — 일반 글상자까지 (보고: '서식 고르고 치면 첫 줄은
           해당 서식인데 엔터 치고 내려오면 기본 글꼴로 적힌다'):
           * 규칙은 .tb-content 안의 '모든 자식 요소'에도 UI 글꼴을 찍는다.
           상자 글꼴은 .tb-content 의 인라인 font-family 로만 존재하고 나머지
           글자는 상속으로 내려가야 하는 구조(18.10 서식 엔진의 전제)인데,
           엔터 줄바꿈이 만들 <div>·붙여넣기 <p>/<div> 같은 요소는 인라인 글꼴이
           없어서 * 규칙에 막혀 기본(UI) 글꼴로 그려졌다. 그 결과
             · 다음 줄이 '서식이 풀린' 기본 글꼴로 입력되고,
             · 상자를 눌러 글꼴을 다시 지정해도(상자 값=상속 경로) 화면이 안 바뀌며,
             · 드래그 선택+글꼴(인라인 span)만 먹히는 모순이 생겼다.
           모든 자식 요소에 font-family:inherit 를 둠으로써 상자 글꼴이 상속으로
           내려가도록 원복한다. 인라인으로 명시한 글꼴(서식 span 등)은 그대로 우선. */
        .tb-content *{font-family:inherit;}
        .tb.pdf-text .tb-content{border-width:0;border-radius:0;}
        .tb.pdf-text.sel .tb-content,.tb.pdf-text.edit .tb-content{outline:1px solid var(--accent);}
        /* PDF 표 셀도 일반 표와 같이 바깥 셀 outline 만 사용한다. */
        .tb.in-tbl.pdf-text.sel .tb-content,
        .tb.in-tbl.pdf-text.edit .tb-content{outline:none!important;}
        .tb.tight.edit .tb-content{display:block;white-space:pre-wrap;line-height:1.4;}
        /* 14.40 · 논문 상자 '줄 흐름' 편집 — 줄(.sdy-tl)은 절대위치(원본 top·높이),
           줄 안은 인라인 흐름. 단어 간격 스페이서(.sdy-tg)는 폭만 있고 높이가 0.
           14.44 · 줄은 nowrap — 원문 줄은 '한 줄'이라 실측 오차로 상자 폭을
           1px 미만 넘어가도 줄 끝에서 접혀 아래 원문 줄과 겹치지 않는다. */
        .tb-content .sdy-tl{position:absolute;left:0;width:100%;box-sizing:border-box;overflow:visible;white-space:nowrap;}
        .tb-content .sdy-tg{display:inline-block;height:0;overflow:hidden;}
        .tb-content .sdy-ts{display:inline;white-space:nowrap;}
        /* 안 보이는 스페이스바: 흐름에서 빼 글자 맞춤은 안 건드리고,
           font-size:0 은 Chromium 이 ::selection / Selection.toString() 에서
           공백을 건너뛰게 하므로 쓰지 않는다. 글자는 투명, 하이라이트만 남는다. */
        .tb.tight .zsp{position:absolute;left:100%;top:0;font-size:1em;font-style:normal;letter-spacing:0;line-height:inherit;white-space:pre;color:transparent;transform-origin:left center;}
        /* 가져온 텍스트 간격 조절 바 */
        .tight-bar{position:fixed;top:64px;left:50%;transform:translateX(-50%);
            z-index:1250;display:none;align-items:center;gap:5px;padding:6px 10px;
            background:var(--card);border:1px solid var(--border);border-radius:8px;
            box-shadow:var(--shadow);}
        .tight-bar.show{display:flex;}
        .tight-bar button{padding:4px 8px;border:1px solid var(--border);border-radius:5px;
            background:var(--bg2);color:var(--text1);font-size:11.5px;font-weight:700;cursor:pointer;}
        .tight-bar button:active{transform:scale(.95);}
        .tight-bar .v{min-width:58px;text-align:center;font-size:11px;color:var(--text2);white-space:nowrap;}
        /* 비어 있는 상자도 위치가 보이도록 은은한 점선 유지 */
        .tb.empty .tb-content{
            border-color:rgba(150,150,150,.35)!important;
            border-style:dashed!important;
            background:transparent;
        }
        .tb.empty:hover .tb-content{border-color:rgba(79,110,247,.5)!important;}

        /* ===== 펜/지우개 실제 크기 커서 ===== */
        .tool-cursor{
            position:fixed;left:0;top:0;z-index:1000;pointer-events:none;display:none;
            transform:translate3d(var(--cursor-x,0),var(--cursor-y,0),0) translate(-50%,-50%);
            will-change:transform;border-radius:50%;box-sizing:border-box;
        }
        .tool-cursor.pen{border:1.5px solid rgba(0,0,0,.65);background:rgba(0,0,0,.12);}
        .tool-cursor.marker{border:1.5px solid currentColor;background:rgba(255,235,59,.22);}
        .tool-cursor.paint{border:2px solid currentColor;background:currentColor;opacity:.55;border-radius:3px 55% 55% 55%;transform:translate3d(var(--cursor-x,0),var(--cursor-y,0),0) translate(-50%,-50%) rotate(45deg);}
        .dark .tool-cursor.pen:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:rgba(255,255,255,.8);}
        .dark .tool-cursor.marker:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:rgba(255,255,255,.8);}
        .tool-cursor.eraser{
            border:2px dotted #ef4444;
            background:rgba(255,255,255,.34);
            box-shadow:0 0 0 1px rgba(255,255,255,.72),0 1px 4px rgba(15,23,42,.18);
        }
        .tool-cursor .dot{
            position:absolute;left:50%;top:50%;width:2px;height:2px;border-radius:50%;
            background:rgba(0,0,0,.55);transform:translate(-50%,-50%);
        }
        /* 15.30 · 마우스로 접속한 컴퓨터 화면에서는 점 대신 도구 모양 글리프를
           포인터 위치 옆에 붙인다 — 펜촉 끝이 정확히 현재 위치를 가리킨다.
           펜 호버(아이패드)/터치에서는 실제 접촉 원만 보여 방해하지 않는다.
           15.56.2 · 글리프(#ed-i-pen · #ed-i-marker · #ed-i-paint)가 선 그림에서 '채운 윤곽'으로 바뀌었다.
             · 색은 stroke 가 아니라 color 로 준다 — 글리프가 fill:currentColor 로 받는다.
             · 자리: 심볼 viewBox(-0.5 -0.5 25 25)를 26px 상자에 그리므로 1칸 = 26/25px 이다.
               연필 끝점 (3, 20.89) 은 상자 왼쪽 위에서 (3.5, 21.39)칸 — 그만큼 당기면 끝점이 포인터에 온다.
               형광펜은 같은 자리에서 넓적촉이 포인터 바로 위에 놓인다(촉 아랫변과의 틈 0.7px).
             · 다크 테마 예외를 두지 않는다. 종이는 다크 테마에서도 밝은데(.sdy-editor-light), 예전 예외는
               글리프를 흰색으로 바꿔 흰 종이 위에서 보이지 않게 만들었다. (:not(.sdy-editor-light …) 가드가
               있었지만 updateToolCursor() 가 className 을 통째로 써서 #toolCursor 의 그 클래스가 떨어지므로
               실제로 걸렸다.) */
        .tool-cursor .tc-icon{
            position:absolute;left:calc(50% - 26px*3.5/25);top:calc(50% - 26px*21.39/25);
            width:26px;height:26px;display:none;overflow:visible;pointer-events:none;
            color:rgba(23,32,51,.88);
            filter:drop-shadow(0 1px 2px rgba(15,23,42,.32));
        }
        /* 페인트 커서는 물방울 모양을 만들려고 통째로 45° 돌아가 있다(위 .tool-cursor.paint).
           양동이 글리프는 이미 기울어진 그림이라 그만큼 되돌려 바로 세우고(회전 중심 = 포인터),
           물방울 오른쪽에 나란히 둔다. */
        .tool-cursor.paint .tc-icon{left:calc(50% + 6px);top:calc(50% - 13px);transform-origin:-6px 13px;transform:rotate(-45deg);}
        .tool-cursor.ptr-mouse .tc-icon{display:block;}
        .tool-cursor.eraser .tc-icon{display:none!important;}

        /* 배치될 실제 크기를 그대로 보여주는 고스트 */
        .text-ghost{
            position:fixed;left:0;top:0;pointer-events:none;display:none;z-index:1001;
            border:1.5px solid color-mix(in srgb,var(--accent) 78%,white 22%);border-radius:10px;
            background:color-mix(in srgb,var(--accent) 8%,var(--card));
            box-shadow:0 12px 30px rgba(40,55,120,.16),inset 0 0 0 1px rgba(255,255,255,.35);
        }
        .text-ghost .tg-label,.place-ghost .tg-label{
            position:absolute;left:0;top:-34px;white-space:nowrap;
            background:linear-gradient(135deg,var(--accent),#8b5cf6);color:#fff;font-size:10.5px;
            padding:6px 8px;border-radius:9px;display:flex;align-items:center;gap:6px;
            box-shadow:0 5px 16px color-mix(in srgb,var(--accent) 35%,transparent);}
        .text-ghost .tg-label b,.place-ghost .tg-label b{font-size:11px}
        .text-ghost .tg-label em, .tg-label kbd,.place-ghost .tg-label em{font-style:normal;opacity:.82;}
        .text-ghost .tg-label kbd,.place-ghost .tg-label kbd{margin-left:2px;padding:1px 5px;border-radius:5px;background:rgba(255,255,255,.2);
            font:700 9px/1.5 ui-monospace,monospace;}
        /* 15.36 · 배치 모드 휠로 고르는 '앞으로 입력될 글자 크기'를 라벨에 숫자로 보여 준다 */
        .text-ghost .tg-label .tg-size{margin-left:2px;padding:1px 5px;border-radius:5px;background:rgba(255,255,255,.2);
            font:700 9.5px/1.5 ui-monospace,monospace;font-style:normal;letter-spacing:.2px;}
        .text-ghost .tg-placeholder{position:absolute;left:14px;top:50%;transform:translateY(-50%);
            font-size:11px;line-height:1.2;color:var(--accent);opacity:.62;white-space:nowrap;}
        .text-ghost .tg-caret{
            position:absolute;left:10px;top:50%;width:2px;height:16px;background:var(--accent);border-radius:2px;
            transform:translateY(-50%);  /* 상자 높이가 몇이든 캐럿은 안내 문구와 함께 세로 중앙 */
            animation:caretBlink 1s steps(1) infinite;
        }
        .text-ghost .tg-corner{position:absolute;width:7px;height:7px;border-radius:50%;background:#fff;
            border:2px solid var(--accent);box-shadow:0 1px 3px rgba(0,0,0,.18);}
        .text-ghost .tg-corner.c1{left:-4px;top:-4px}.text-ghost .tg-corner.c2{right:-4px;top:-4px}
        .text-ghost .tg-corner.c3{left:-4px;bottom:-4px}.text-ghost .tg-corner.c4{right:-4px;bottom:-4px}
        @keyframes caretBlink{50%{opacity:0}}
        /* ===== 그림·수식 배치 고스트 — 상자·표 고스트와 같은 규칙(누른 자리 = 생기는 자리) ===== */
        .place-ghost{
            position:fixed;left:0;top:0;pointer-events:none;display:none;z-index:1003;overflow:visible;
            border:1.5px solid color-mix(in srgb,var(--accent) 78%,white 22%);border-radius:10px;
            background:color-mix(in srgb,var(--accent) 8%,var(--card));
            box-shadow:0 12px 30px rgba(40,55,120,.16),inset 0 0 0 1px rgba(255,255,255,.35);
        }
        .pg-body{position:absolute;inset:0;overflow:hidden;border-radius:inherit;}
        .pg-body .pg-scale{transform-origin:0 0;width:100%;height:100%;opacity:.92;
            background-size:contain;background-repeat:no-repeat;background-position:center;}
        .pg-body .pg-latex{display:flex;align-items:center;justify-content:center;overflow:hidden;
            color:var(--text);padding:2px;}
        body.placing-text #pagesStage .paper,body.placing-table #pagesStage .paper,
        body.placing-el #pagesStage .paper{cursor:crosshair;}
        .table-ghost{
            position:fixed;left:0;top:0;pointer-events:none;display:none;z-index:1002;
            border:2px solid color-mix(in srgb,var(--accent) 82%,white 18%);border-radius:3px;
            background-color:color-mix(in srgb,var(--accent) 7%,var(--card));
            background-image:linear-gradient(to right,color-mix(in srgb,var(--accent) 55%,transparent) 1px,transparent 1px),
                             linear-gradient(to bottom,color-mix(in srgb,var(--accent) 55%,transparent) 1px,transparent 1px);
            background-size:calc(100% / var(--tbl-cols,3)) 100%,100% calc(100% / var(--tbl-rows,3));
            box-shadow:0 14px 34px rgba(40,55,120,.18);opacity:.9;
        }
        .table-ghost .tg-label{
            position:absolute;left:0;top:-34px;white-space:nowrap;
            background:linear-gradient(135deg,var(--accent),#8b5cf6);color:#fff;font-size:10.5px;
            padding:6px 8px;border-radius:9px;display:flex;align-items:center;gap:6px;
            box-shadow:0 5px 16px color-mix(in srgb,var(--accent) 35%,transparent);
        }
        .table-ghost .tg-label b{font-size:11px}.table-ghost .tg-label em{font-style:normal;opacity:.82;}
        .table-ghost .tg-label kbd{margin-left:2px;padding:1px 5px;border-radius:5px;background:rgba(255,255,255,.2);
            font:700 9px/1.5 ui-monospace,monospace;}

        /* 펜/형광펜 색 상자는 페이지를 가리는 화면 아래가 아니라,
           편집 툴바 바로 아래 — 페이지 위쪽에 띄운다. */
        .draw-toolbar{
            position:fixed;top:calc(var(--sdy-edbar-bottom, 56px) + 10px);bottom:auto;
            left:50%;transform:translateX(-50%);
            background:var(--card);border:1px solid var(--border);border-radius:16px;
            padding:7px 10px;display:flex;flex-direction:row;flex-wrap:nowrap;gap:8px;align-items:center;
            box-shadow:0 10px 28px rgba(0,0,0,.18);z-index:1250;
            max-width:min(960px, calc(100vw - 20px));
            overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;
        }
        /* 15.30 · 도구별 노출 — 막대에는 '펜' 라벨 대신 지금 도구에 맞는 조작만.
           펜: 색+굵기+펜촉+도형 · 형광펜: 색+굵기+도형 · 페인트: 색만
           지우개: 지우개 모드(픽셀/획)+지우개 굵기 */
        /* 15.31 · 도구별 노출의 기준값은 '숨김' 이다. 예전엔 색·굵기·도형이
           기본 표시라, 도구 표시 클래스가 붙기 전(또는 페인트·지우개에서)
           도형 묶음이 남아 도구막대가 두 줄로 커졌다. */
        /* 15.31.1 · 도형 묶음이 세로로 쌓이던 원인 — 15.30 에는 .dt-shapes 규칙이
           아예 없어 평범한 block div 였고, 안의 버튼은 .tool-btn{display:flex}
           (블록 레벨)이라 다섯 개가 위에서 아래로 쌓여 상자가 다섯 줄로 커졌다.
           이제 묶음은 언제나 가로 한 줄(flex-direction:row · nowrap)이다. */
        .dt-nibs,.dt-eraser,.dt-shapes{display:none;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:2px;flex:none;}
        /* 도형 뒤의 지우개 설정은 별도 모드에서만 보이므로 끝 구분선은 필요 없다. */
        .draw-toolbar .dt-e-sep{display:none;}
        .draw-toolbar.pen-on .dt-nibs{display:flex;}
        .draw-toolbar.pen-on .dt-shapes,
        .draw-toolbar.marker-on .dt-shapes{display:flex;}
        /* 클래스가 아직 안 붙은 찰나에도 펜 기준으로 보여 준다(두 줄로 커짐 방지) */
        .draw-toolbar:not(.pen-on):not(.marker-on):not(.paint-on):not(.eraser-on) .dt-shapes,
        .draw-toolbar:not(.pen-on):not(.marker-on):not(.paint-on):not(.eraser-on) .dt-nibs{display:flex;}
        .draw-toolbar.eraser-on .dt-eraser{display:flex;}
        .draw-toolbar.eraser-on .dt-colors,
        .draw-toolbar.eraser-on .dt-shapes,
        .draw-toolbar.eraser-on .dt-nibs,
        .draw-toolbar.eraser-on .dt-c-sep,
        .draw-toolbar.eraser-on .dt-n-sep,
        .draw-toolbar.eraser-on .dt-e-sep{display:none;}
        .draw-toolbar.paint-on .dt-sizes,
        .draw-toolbar.paint-on .dt-s-sep,
        .draw-toolbar.paint-on .dt-nibs,
        .draw-toolbar.paint-on .dt-n-sep,
        .draw-toolbar.paint-on .dt-shapes,
        .draw-toolbar.paint-on .dt-e-sep,
        .draw-toolbar.paint-on .dt-c-sep{display:none;}
        .draw-toolbar.marker-on .dt-nibs,
        .draw-toolbar.marker-on .dt-n-sep{display:none;}
        .dt-colors{
            display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:8px;flex:none;
            padding:5px 7px;border-radius:999px;background:#fff;
            box-shadow:0 1px 2px rgba(0,0,0,.16), inset 0 0 0 1px rgba(15,23,42,.06);
        }
        .dt-sizes{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:4px;flex:none;padding:0 2px;}
        .color-pick{width:28px;height:28px;border-radius:50%;cursor:pointer;border:2px solid transparent;flex:none;box-sizing:border-box;}
        .color-pick:hover,.color-pick.sel{border-color:var(--text1);transform:scale(1.1);}
        .draw-toolbar .dt-colors .color-pick{
            width:24px;height:24px;min-width:24px;border:2px solid #fff;
            box-shadow:0 0 0 1px rgba(15,23,42,.22);transform:none;
        }
        .draw-toolbar .dt-colors .color-pick:hover{transform:translateY(-1px);}
        .draw-toolbar .dt-colors .color-pick.sel{
            border-color:#fff;transform:none;
            box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--accent);
        }
        #penCustom.color-pick{
            appearance:none;-webkit-appearance:none;padding:0;border:2px solid #fff;
            background:conic-gradient(from 210deg,#ff4d4d,#ffb020,#ffe14a,#3ddc78,#3aa0ff,#b06bff,#ff4d4d);
            box-shadow:0 0 0 1px rgba(15,23,42,.22);
        }
        #penCustom.color-pick.sel{border-style:solid;border-color:#fff;outline:none;
            box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--accent);}
        #penCustom::-webkit-color-swatch-wrapper{padding:3px;border:0;border-radius:50%;}
        #penCustom::-webkit-color-swatch{border:0;border-radius:50%;}
        #penCustom::-moz-color-swatch{border:3px solid transparent;border-radius:50%;}
        /* 15.30 · 굵기 버튼은 전부 같은 크기(26px) — 안에 보이는 점만 굵기별.
           얇은 굵기를 고르려고 콩알만한 버튼을 누르는 일이 없게 한다. */
        .size-opt{
            width:26px;height:26px;min-width:26px;min-height:26px;flex:none;
            border-radius:50%;border:0;padding:0;background:transparent;cursor:pointer;
            display:inline-flex;align-items:center;justify-content:center;position:relative;
        }
        /* 15.32 · 굵기 점은 버튼 정중앙에 못 박는다 — 굵은 점(17px)일수록
           0.5px 어긋나도 흰 띠 폭이 달라 보여 '중심이 안 맞는' 것처럼 보였다.
           flex 정렬 대신 left/top 50% + translate 로 어느 브라우저에서도 정확히 중앙. */
        .size-opt::after{
            content:'';position:absolute;left:50%;top:50%;
            width:var(--d,8px);height:var(--d,8px);margin:0;flex:none;
            transform:translate(-50%,-50%);
            border-radius:50%;background:var(--text1);transition:transform .12s ease;
        }
        .size-opt:hover::after{transform:translate(-50%,-50%) scale(1.18);}
        .size-opt.sel{outline:2px solid var(--accent);outline-offset:1px;}
        .size-opt.sel::after{background:var(--accent);}
        .draw-toolbar .tool-btn{flex:none;}
        .draw-toolbar .ed-icon{
            display:block;flex:none;width:21px;height:21px;overflow:visible;
            fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;
        }
        /* 15.42.16 · 펜·형광펜 색상판이 떠도 화면이 내려가지 않게 한다.
           과거엔 색상판 높이만큼 .editor-body 에 padding-top 을 붙여 첫 페이지
           제목을 가리지 않게 했는데, 그 여백이 화면을 아래로 밀어 사용자가
           서 있는 자리까지 쏠리게 했다. 색상판은 position:fixed 라 본문 흐름에
           영향을 주지 않으므로, 여백은 언제나 일정하게 유지한다. */

        .toast{
            position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-80px);
            background:var(--text1);color:var(--bg);padding:10px 24px;border-radius:4px;
            font-size:13px;opacity:0;transition:all .4s;z-index:9998;
        }
        .toast.show{transform:translateX(-50%) translateY(0);opacity:1;}

        .modal-bg{position:fixed;inset:0;background:rgba(0,0,0,0.4);backdrop-filter:blur(4px);z-index:1900;display:none;align-items:center;justify-content:center;padding:16px;}
        @keyframes fadeInUp{from{opacity:0;transform:translateY(10px) scale(.98);}to{opacity:1;transform:translateY(0) scale(1);}}
        .modal-box{background:var(--card);border:1px solid var(--border);border-radius:5px;padding:24px;max-width:420px;width:100%;animation:fadeInUp .28s ease-out;}
        /* 14.13 · 토글은 앱 전체의 라운드/필(999px) 디자인 언어에 맞춰 사각을 버림 */
        .tgl{position:relative;width:44px;height:24px;background:var(--border);border-radius:999px;cursor:pointer;transition:background .25s;}
        .tgl.on{background:var(--accent);}
        .tgl .dot{position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .3s;}
        .tgl.on .dot{transform:translateX(20px);}
        .set-row{padding:14px 0;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;}
        .set-row:last-child{border:none;}
        .set-row .set-label{display:flex;flex-direction:column;gap:2px;min-width:0;}
        .set-row .set-label .dim{font-size:11px;color:var(--text3);}
        /* 16.x · 설정값(select·스위치·스와치)은 오른쪽에 가지런히 — 강조색 9개 스와치가
           두 줄로 흘러 '강조색' 라벨만 덩그러니 남던 문제 정리 */
        .set-row > .set-label ~ *{margin-left:auto;}
        .set-row.accent-row{flex-direction:column;align-items:stretch;gap:10px;}
        .set-row.accent-row .set-label ~ *{margin-left:0;}
        .set-row select,.set-row input[type=number],.set-row input[type=text]{
            padding:7px 10px;border:1px solid var(--border);border-radius:4px;
            background:var(--bg2);color:var(--text1);font-size:13px;outline:none;max-width:150px;
        }
        /* 강조색 스와치 */
        .accent-picks{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-start;}
        .accent-swatch{width:26px;height:26px;border-radius:50%;cursor:pointer;border:2px solid transparent;
            transition:transform .12s ease;flex:none;}
        .accent-swatch:hover{transform:scale(1.15);}
        .accent-swatch.on{border-color:var(--text1);box-shadow:0 0 0 2px var(--bg);}
        /* 카드 크기 */
        body.card-s .note-card,body.card-s .folder-card,body.card-s .add-card{width:160px;flex-basis:160px;}
        body.card-s .note-preview,body.card-s .folder-thumb{height:200px;}
        body.card-l .note-card,body.card-l .folder-card,body.card-l .add-card{width:244px;flex-basis:244px;}
        body.card-l .note-preview,body.card-l .folder-thumb{height:322px;}
        /* 휴지통 목록 */
        .trash-item{display:flex;align-items:center;gap:10px;padding:11px 6px;border-bottom:1px solid var(--border);}
        .trash-item b{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--text1);}
        .trash-item .days{font-size:11px;color:var(--text3);flex:none;}
        .trash-item button{flex:none;padding:6px 11px;border-radius:4px;border:1px solid var(--border);
            background:var(--bg2);color:var(--text1);font-size:12px;cursor:pointer;}
        .trash-item button:hover{border-color:var(--accent);color:var(--accent);}
        .trash-item button.danger{color:#e74c3c;border-color:rgba(231,76,60,.3);}
        .trash-item button.danger:hover{border-color:#e74c3c;background:rgba(231,76,60,.07);}
        .size-preset-card{
            border:1px solid var(--border);border-radius:4px;padding:12px;cursor:pointer;
            display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;
            background:var(--bg2);transition:all .2s;
        }
        .size-preset-card:hover{border-color:var(--accent);transform:translateY(-2px);}
        .size-preset-thumb{border:2px solid var(--text3);border-radius:3px;background:#fff;}
        .dark .size-preset-thumb:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#2b2b31;border-color:#888;}

        .select-bar{
            position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(80px);
            background:var(--card);border:1px solid var(--border);border-radius:5px;
            padding:10px 20px;display:flex;align-items:center;gap:12px;
            box-shadow:0 8px 32px rgba(0,0,0,0.12);z-index:1900;
            transition:transform .35s cubic-bezier(.4,0,.2,1),opacity .35s;opacity:0;
        }
        .select-bar.show{transform:translateX(-50%) translateY(0);opacity:1;}

        .emoji-badge{
            position:absolute;top:8px;left:8px;z-index:12;font-size:22px;
            width:32px;height:32px;display:flex;align-items:center;justify-content:center;
            cursor:pointer;border-radius:3px;transition:background .2s,opacity .2s;opacity:0;
        }
        .note-card:hover .emoji-badge,.emoji-badge.has-emoji{opacity:1;}
        .emoji-badge:hover{background:rgba(0,0,0,0.06);}
        /* 15.19 · 빈 반응 칸 자리표 — 글자 '◌' 대신 CSS 원. 글자는 베이스라인 때문에
           네모 칸의 정중앙과 원 중심이 어긋나 보였다(사용자 지적). CSS 원은 칸의
           기하학적 중앙에 정확히 온다. */
        .emoji-badge .emoji-ph{
            display:block;width:16px;height:16px;border-radius:50%;box-sizing:border-box;
            border:2px dotted var(--text3);opacity:.55;
        }
        /* 15.19 · 반응을 남긴 뒤에는 이모지만 보인다 — 주변 배경(칩)을 완전히
           없앤다(사용자 요청: "이모지 말구 주변 배경이 안보이게. 바로 이모지만
           딱 들어가게"). 칩은 아직 반응 없는 칸(자리표)에만 남는다. */
        .emoji-badge.has-emoji,
        .emoji-badge.has-emoji:hover{
            background:transparent!important;border-color:transparent!important;
            box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
        }
        .emoji-picker{
            position:absolute;top:38px;left:4px;z-index:30;
            background:var(--card);border:1px solid var(--border);border-radius:4px;
            padding:6px;display:none;flex-wrap:wrap;gap:2px;width:180px;
            box-shadow:0 6px 20px rgba(0,0,0,0.12);
        }
        .emoji-picker.open{display:flex;}
        .emoji-opt{
            width:30px;height:30px;display:flex;align-items:center;justify-content:center;
            font-size:18px;cursor:pointer;border-radius:3px;
        }
        .emoji-opt:hover{background:rgba(0,0,0,0.08);}
        /* 업로드 진행 중 이미지 */
        .paper-img.pending{opacity:.62;}
        .paper-img.pending::after{
            content:'';position:absolute;left:6px;top:6px;width:14px;height:14px;border-radius:50%;
            border:2px solid rgba(79,110,247,.35);border-top-color:var(--accent);
            animation:spin .8s linear infinite;z-index:7;
        }
        .paper-img.failed{outline:2px dashed #e74c3c;opacity:.85;}

        /* 잠긴 노트 카드 */
        .note-card.locked .note-preview-frame{filter:blur(9px);opacity:.5;}
        .lock-overlay{
            position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
            gap:8px;z-index:13;color:var(--text2);background:rgba(255,255,255,.30);pointer-events:none;
        }
        .dark .lock-overlay:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(20,20,24,.35);}
        .lock-overlay i{font-size:30px;color:var(--accent);}
        .lock-overlay span{font-size:11px;font-weight:600;}
        .unlock-badge{
            position:absolute;right:8px;top:8px;z-index:14;width:24px;height:24px;border-radius:50%;
            background:var(--card);color:var(--accent);display:flex;align-items:center;justify-content:center;
            box-shadow:0 1px 5px rgba(0,0,0,.15);font-size:13px;
        }
        .note-card:hover .unlock-badge{opacity:0;}
        .pin-badge{
            position:absolute;left:8px;top:8px;z-index:14;font-size:13px;color:var(--accent);
            background:var(--card);border-radius:50%;width:24px;height:24px;
            display:flex;align-items:center;justify-content:center;box-shadow:0 1px 5px rgba(0,0,0,.15);
        }
        .card-menu{
            position:absolute;right:6px;top:6px;z-index:15;width:26px;height:26px;border-radius:3px;
            display:none;align-items:center;justify-content:center;cursor:pointer;
            background:var(--card);color:var(--text2);box-shadow:0 1px 6px rgba(0,0,0,.16);font-size:15px;
        }
        .note-card:hover .card-menu{display:flex;}
        @media(hover:none){
            .card-menu{display:flex;}                 /* 터치 기기: 항상 보이게 */
            .emoji-badge{opacity:.55;}
        }
        .card-menu:hover{color:var(--accent);}
        body:has(#ctxMenu.show) #musicPlayer,
        body:has(#ctxMenu.show) #mpReopen{display:none!important;}
        /* 우클릭 메뉴 — 확대 배율(--ctxz)에 맞춰 같이 커지고,
           길어지면 잘리지 않고 스스로 스크롤된다. */
        .ctx-menu{
            --ctxz:1;
            position:fixed;z-index:600;background:var(--card);border:1px solid var(--border);
            border-radius:calc(10px * var(--ctxz));padding:calc(6px * var(--ctxz));
            min-width:calc(184px * var(--ctxz));
            /* 9.0 · 종이를 아무리 확대해도 메뉴는 이 폭을 넘지 않는다 */
            max-width:min(300px, calc(100vw - 16px));
            box-shadow:0 12px 34px rgba(0,0,0,.20);display:none;
            overflow-y:auto;overscroll-behavior:contain;
            /* 확대된 종이 위에 떠도 메뉴만은 원래 크기로 (transform 상속 차단) */
            transform:none!important;zoom:normal;
        }
        .ctx-menu.show{display:block;}
        .ctx-menu::-webkit-scrollbar{width:calc(8px * var(--ctxz));}
        .ctx-item{
            display:flex;align-items:center;gap:calc(9px * var(--ctxz));
            padding:calc(9px * var(--ctxz)) calc(11px * var(--ctxz));
            border-radius:calc(7px * var(--ctxz));
            font-size:calc(13px * var(--ctxz));color:var(--text1);cursor:pointer;white-space:nowrap;
        }
        .ctx-item i{font-size:calc(15px * var(--ctxz));width:calc(17px * var(--ctxz));
            text-align:center;flex:none;color:var(--text2);}
        .ctx-item:hover{background:var(--bg2);}
        .ctx-item.danger,.ctx-item.danger i{color:#e74c3c;}
        .ctx-key{margin-left:auto;color:var(--text3);font-size:calc(11px * var(--ctxz));
            padding-left:calc(10px * var(--ctxz));}
        .ctx-sep{height:1px;background:var(--border);margin:calc(4px * var(--ctxz)) calc(2px * var(--ctxz));}
        /* 접힌 묶음 */
        .ctx-group .ctx-caret{margin-left:auto;transition:transform .15s;
            font-size:calc(15px * var(--ctxz));}
        .ctx-group.open{background:var(--bg2);font-weight:700;}
        .ctx-group.open .ctx-caret{transform:rotate(90deg);}
        .ctx-subwrap{margin:calc(2px * var(--ctxz)) 0 calc(4px * var(--ctxz));
            padding-left:calc(10px * var(--ctxz));
            border-left:2px solid var(--border);}
        .ctx-subwrap .ctx-item{font-size:calc(12.5px * var(--ctxz));
            padding-top:calc(8px * var(--ctxz));padding-bottom:calc(8px * var(--ctxz));}

        /* ===== 암기 카드 — 10.7 · 음악플레이어식 플로팅 윈도우 ===== */
        /* 서버 팝오버(1650)보다 위에 떠야 겹쳐 보이지 않는다 */
        /* 10.8 · 완전 플로팅: 배경 어둡힘/블러 없음(음악플레이어와 동일),
           창만 떠 있고 바깥 터치로 닫힌다 */
        /* 10.9 · 배경 흐림(블러) 완전 제거 — 음악 플레이어와 똑같이 뒤가 또렷하게 보인다.
           .modal-bg 공통 규칙(blur 4~5px)이 여기까지 따라오지 않도록 !important 로 끊는다. */
        #cardsModal{z-index:1700;background:transparent !important;pointer-events:none;padding:0;
            backdrop-filter:none !important;-webkit-backdrop-filter:none !important;
            filter:none !important;}
        #cardsModal::before,#cardsModal::after{display:none !important;}
        .fcard-win{pointer-events:auto;width:min(760px,96vw) !important;max-width:min(760px,96vw) !important;
            max-height:92vh;display:flex;flex-direction:column;
            padding:0 !important;overflow:hidden;position:fixed;left:50%;top:50%;
            transform:translate(-50%,-50%);
            box-shadow:0 22px 70px rgba(0,0,0,.30);
            animation:fcIn .32s cubic-bezier(.22,.9,.3,1.08);}
        .fcard-win.closing{animation:fcOut .26s cubic-bezier(.5,0,.8,.4) forwards;}
        .fcard-win.moved{left:var(--fx,top);transform:none;}
        @keyframes fcIn{from{opacity:0;transform:translate(-50%,-50%) translateY(30px) scale(.96);}
                        to{opacity:1;transform:translate(-50%,-50%) scale(1);}}
        @keyframes fcOut{to{opacity:0;transform:translate(-50%,-50%) translateY(40px) scale(.9);}}
        @keyframes fcInMove{from{opacity:0;transform:translateY(30px) scale(.96);}
                            to{opacity:1;transform:none;}}
        .fcard-win.moved{animation:fcInMove .32s cubic-bezier(.22,.9,.3,1.08);}
        .fcard-win.moved.closing{animation:fcOutMove .26s forwards !important;}
        @keyframes fcOutMove{to{opacity:0;transform:translateY(40px) scale(.9);}}
        .fcard-head{display:flex;align-items:center;gap:8px;padding:3px 8px;flex:none;
            background:var(--bg2);border-bottom:1px solid var(--border);min-height:20px;
            cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;}
        .fcard-head:active{cursor:grabbing;}
        .fcard-head>i{color:var(--text3);font-size:12px;opacity:.7;}
        .fcard-head>b{font-size:12px;color:var(--text2);font-weight:700;}
        .fcard-head .sp{flex:1;}
        .fcard-head .cards-x{width:22px;height:19px;font-size:14px;border-radius:6px;}
        /* 10.8 · 크기 조절 손잡이 제거(음악플레이어와 동일) */
        /* 학습 모드 선택 카드 (Quizlet 스타일) */
        .fc-modes{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:4px;}
        @media(max-width:560px){.fc-modes{grid-template-columns:repeat(2,1fr);}}
        .fc-mode{display:flex;flex-direction:row;align-items:center;gap:8px;padding:13px 12px;
            border:1px solid var(--border);border-radius:12px;background:var(--bg2);cursor:pointer;
            text-align:left;transition:transform .15s,border-color .15s;}
        .fc-mode:hover{border-color:var(--accent);transform:translateY(-2px);}
        .fc-mode:active{transform:scale(.97);}
        .fc-mode i{font-size:19px;color:var(--accent);margin-bottom:0;flex:none;}
        .fc-mode b{font-size:12.5px;color:var(--text1);white-space:nowrap;
            overflow:hidden;text-overflow:ellipsis;min-width:0;}
        /* 오답 순위 목록 — 눌러서 바로 그 문제 다시 보기 */
        .cd-hard .h{display:flex;align-items:center;gap:8px;padding:8px 9px;border-radius:8px;
            border:1px solid transparent;cursor:pointer;}
        .cd-hard .h:hover{background:var(--bg2);border-color:color-mix(in srgb,var(--accent) 30%,transparent);}
        .cd-hard .h b{margin-left:auto;color:#ef4444;font-size:11px;flex:none;}
        .cd-hard .h .go{flex:none;color:var(--text3);font-size:13px;}
        .cards-head{display:none;}
        .cards-x{width:32px;height:32px;border:none;background:transparent;color:var(--text3);
            border-radius:8px;cursor:pointer;font-size:19px;}
        .cards-x:hover{background:var(--bg2);}
        #cardsHome,#cardsStudy,#cardsPaste,#cardsStats,#cardsAnalytics,#cardsBrowse{padding:14px 16px 16px;overflow-y:auto;min-height:0;}
        .cards-actions{display:flex;gap:7px;flex-wrap:wrap;}
        .cd-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
            padding:10px 13px;border:1px solid var(--border);border-radius:10px;
            background:var(--bg2);color:var(--text1);font-size:12.5px;font-weight:700;cursor:pointer;}
        .cd-btn:hover{border-color:var(--accent);color:var(--accent);}
        .cd-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;}
        .cd-btn.primary:hover{filter:brightness(1.08);color:#fff;}
        .cards-list{margin-top:13px;display:flex;flex-direction:column;gap:7px;}
        .cd-deck{display:flex;align-items:center;gap:11px;padding:12px;border-radius:11px;
            border:1px solid var(--border);background:var(--bg2);cursor:pointer;}
        .cd-deck:hover{border-color:var(--accent);}
        .cd-deck .t{flex:1;min-width:0;}
        .cd-deck .t b{display:block;font-size:13.5px;color:var(--text1);
            overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .cd-deck .t span{font-size:11px;color:var(--text3);}
        .cd-ring{width:38px;height:38px;flex:none;border-radius:50%;display:flex;
            align-items:center;justify-content:center;font-size:10.5px;font-weight:800;
            color:var(--accent);}
        .cd-deck .more{width:30px;height:30px;border:none;background:transparent;flex:none;
            color:var(--text3);border-radius:7px;cursor:pointer;font-size:17px;}
        .cd-deck .more:hover{background:var(--card);color:var(--text1);}
        .cd-empty{padding:34px 12px;text-align:center;color:var(--text3);font-size:12.5px;line-height:1.7;}
        /* 학습 */
        .cd-topbar{display:flex;align-items:center;gap:10px;margin-bottom:13px;}
        .cd-back{width:32px;height:32px;border:none;background:var(--bg2);color:var(--text1);
            border-radius:8px;cursor:pointer;font-size:16px;flex:none;
            display:flex;align-items:center;justify-content:center;line-height:1;}
        .cd-prog{flex:1;height:6px;border-radius:99px;background:var(--bg2);overflow:hidden;}
        #cdProgFill{height:100%;width:0;background:var(--accent);border-radius:99px;transition:width .3s;}
        .cd-count{font-size:11.5px;color:var(--text3);flex:none;font-variant-numeric:tabular-nums;}
        .cd-flip{perspective:1200px;cursor:pointer;user-select:none;display:block;width:100%;}
        /* 높이를 확실히 잡아 준다 (min-height 만 주면 절대배치 면이 0 이 된다) */
        .cd-inner{position:relative;width:100%;height:230px;
            transition:transform .45s cubic-bezier(.4,.2,.2,1);transform-style:preserve-3d;}
        .cd-flip.flipped .cd-inner{transform:rotateY(180deg);}
        .cd-face{position:absolute;inset:0;backface-visibility:hidden;
            display:flex;flex-direction:column;align-items:center;justify-content:center;
            gap:9px;padding:24px 20px;border-radius:16px;border:1px solid var(--border);
            background:var(--bg2);text-align:center;}
        .cd-rear{transform:rotateY(180deg);
            background:color-mix(in srgb,var(--accent) 9%,var(--bg2));
            border-color:color-mix(in srgb,var(--accent) 32%,var(--border));}
        .cd-txt{font-size:17px;font-weight:700;color:var(--text1);line-height:1.55;
            word-break:break-word;white-space:pre-wrap;}
        .cd-hint{font-size:12px;color:var(--text3);}
        .cd-note{font-size:12px;color:var(--text2);line-height:1.6;white-space:pre-wrap;}
        .cd-tap{position:absolute;bottom:12px;font-size:10.5px;color:var(--text3);opacity:.75;}
        .cd-grade{display:flex;gap:9px;margin-top:13px;}
        .cd-grade button{flex:1;padding:14px;border:none;border-radius:12px;cursor:pointer;
            font-size:13.5px;font-weight:800;display:flex;align-items:center;
            justify-content:center;gap:6px;}
        .cd-ng{background:rgba(239,68,68,.13);color:#ef4444;}
        .cd-ok{background:rgba(16,185,129,.15);color:#059669;}
        .cd-ng:active,.cd-ok:active{transform:scale(.97);}
        .cd-done{display:flex;flex-direction:column;align-items:center;gap:9px;padding:40px 16px;text-align:center;}
        .cd-done i{font-size:42px;color:#10b981;}
        .cd-done b{font-size:15px;color:var(--text1);}
        .cd-done span{font-size:12px;color:var(--text3);}
        .cd-name{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;
            background:var(--bg2);color:var(--text1);font-size:13px;outline:none;margin-bottom:8px;}
        .cd-name:focus{border-color:var(--accent);}
        .cd-paste{width:100%;height:min(290px,40vh);padding:12px;border:1px solid var(--border);
            border-radius:11px;background:var(--bg2);color:var(--text1);font-size:12.5px;
            line-height:1.6;resize:vertical;outline:none;
            font-family:ui-monospace,SFMono-Regular,Menlo,monospace;}
        .cd-paste:focus{border-color:var(--accent);}
        .cd-pinfo{min-height:19px;margin:8px 2px 10px;font-size:11.5px;color:var(--text3);}
        .cd-pinfo.ok{color:#059669;}
        .cd-pinfo.ok b{color:#059669;}
        .cd-pinfo.bad{color:#e74c3c;}
        .cd-pinfo span{color:var(--text3);font-weight:400;}
        /* ── 채점 4단계 (SM-2) ── */
        .cd-grade{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:13px;}
        .cd-grade button{flex:1;padding:11px 4px;border:none;border-radius:11px;cursor:pointer;
            display:flex;flex-direction:column;align-items:center;gap:2px;}
        .cd-grade button b{font-size:12.5px;font-weight:800;}
        .cd-grade button span{font-size:9.5px;opacity:.75;font-weight:600;}
        .cd-grade .g0{background:rgba(239,68,68,.13);color:#ef4444;}
        .cd-grade .g1{background:rgba(245,158,11,.15);color:#b45309;}
        .cd-grade .g2{background:rgba(59,130,246,.13);color:#2563eb;}
        .cd-grade .g3{background:rgba(16,185,129,.15);color:#059669;}
        .cd-grade button:active{transform:scale(.96);}
        .dark .cd-grade .g1:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#fbbf24;}
        /* ── 객관식 ── */
        .cd-qq{font-size:16px;font-weight:700;color:var(--text1);line-height:1.55;
            padding:16px 14px;border-radius:14px;background:var(--bg2);
            border:1px solid var(--border);text-align:center;white-space:pre-wrap;}
        .cd-opts{display:flex;flex-direction:column;gap:7px;margin-top:11px;}
        .cd-opt{display:flex;align-items:center;gap:10px;padding:13px 14px;border-radius:11px;
            border:1.5px solid var(--border);background:var(--bg2);color:var(--text1);
            font-size:13.5px;cursor:pointer;text-align:left;transition:all .15s;}
        .cd-opt:hover{border-color:var(--accent);}
        .cd-opt i.num{width:22px;height:22px;border-radius:50%;background:var(--card);
            border:1px solid var(--border);display:flex;align-items:center;justify-content:center;
            font-size:11px;font-weight:800;font-style:normal;color:var(--text2);flex:none;}
        .cd-opt span{flex:1;}
        .cd-opt.ok{border-color:#10b981;background:rgba(16,185,129,.14);color:#059669;font-weight:700;}
        .cd-opt.ok i.num{background:#10b981;color:#fff;border-color:#10b981;}
        .cd-opt.no{border-color:#ef4444;background:rgba(239,68,68,.12);color:#ef4444;}
        .cd-opt.no i.num{background:#ef4444;color:#fff;border-color:#ef4444;}
        .cd-opt[disabled]{cursor:default;}
        /* ── 직접 입력 ── */
        .cd-typein{width:100%;margin-top:11px;padding:14px;border:1.5px solid var(--border);
            border-radius:12px;background:var(--bg2);color:var(--text1);font-size:15px;outline:none;}
        .cd-typein:focus{border-color:var(--accent);}
        .cd-typeres{min-height:22px;margin:9px 2px;font-size:12.5px;font-weight:700;}
        .cd-typeres.ok{color:#059669;} .cd-typeres.no{color:#ef4444;}
        .cd-typeres em{font-style:normal;color:var(--text2);font-weight:400;}
        .cd-hintbtn{position:absolute;bottom:34px;padding:5px 12px;border-radius:99px;
            border:1px solid var(--border);background:var(--card);color:var(--text3);
            font-size:11px;cursor:pointer;}
        .cd-hintbtn:hover{color:var(--accent);border-color:var(--accent);}
        /* ── 학습 방식 고르기 ── */
        .cd-statrow{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:14px;}
        .cd-stat{padding:10px 4px;border-radius:11px;background:var(--bg2);text-align:center;}
        .cd-stat b{display:block;font-size:17px;font-weight:800;color:var(--text1);}
        .cd-stat span{font-size:10px;color:var(--text3);}
        .cd-stat.due b{color:var(--accent);}
        .cd-lbl{font-size:11px;font-weight:800;color:var(--text3);margin:4px 2px 7px;letter-spacing:.04em;}
        .cd-modes{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;}
        .cd-mode{display:flex;flex-direction:column;align-items:flex-start;gap:2px;
            padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--bg2);
            color:var(--text1);cursor:pointer;text-align:left;}
        .cd-mode:hover{border-color:var(--accent);}
        .cd-mode i{font-size:18px;color:var(--accent);margin-bottom:3px;}
        .cd-mode b{font-size:13px;}
        .cd-mode span{font-size:10.5px;color:var(--text3);line-height:1.4;}
        .cd-mode[disabled]{opacity:.4;cursor:not-allowed;}
        .cd-tagpick{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;}
        .cd-tag{padding:6px 11px;border-radius:99px;border:1px solid var(--border);
            background:var(--bg2);color:var(--text2);font-size:11.5px;cursor:pointer;}
        .cd-tag.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700;}
        .cd-hard{margin-top:12px;}
        .cd-hard .h{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:8px;
            font-size:11.5px;color:var(--text2);}
        .cd-hard .h b{margin-left:auto;color:#ef4444;font-size:11px;flex:none;}

        /* ═══════ 11.7 · 짝 맞추기 (Match) ═══════ */
        .cd-match{display:flex;flex-direction:column;gap:10px;}
        .cd-mtop{display:flex;align-items:center;justify-content:space-between;
            font-size:11.5px;color:var(--text3);padding:0 2px;}
        .cd-mtop b{font-variant-numeric:tabular-nums;font-size:13px;color:var(--accent);}
        .cd-mgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;}
        @media(min-width:620px){ .cd-mgrid{grid-template-columns:repeat(3,1fr);} }
        .cd-tile{position:relative;min-height:62px;padding:11px 12px;border-radius:12px;
            border:1.5px solid var(--border);background:var(--bg2);color:var(--text1);
            font-size:12.5px;line-height:1.4;cursor:pointer;text-align:left;
            display:flex;align-items:center;word-break:break-word;
            transition:transform .14s,border-color .16s,background .16s,opacity .3s;}
        .cd-tile:hover{border-color:color-mix(in srgb,var(--accent) 55%,var(--border));}
        .cd-tile:active{transform:scale(.97);}
        .cd-tile.pick{border-color:var(--accent);
            background:color-mix(in srgb,var(--accent) 15%,transparent);font-weight:700;}
        .cd-tile.bad{border-color:#ef4444;background:rgba(239,68,68,.13);
            animation:cdShake .32s;}
        @keyframes cdShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}
                           75%{transform:translateX(5px)}}
        .cd-tile.gone{opacity:0;pointer-events:none;transform:scale(.9);}
        .cd-tile .ans{color:var(--text2);}
        .cd-mdone{text-align:center;padding:16px 10px 6px;}
        .cd-mdone b{display:block;font-size:20px;color:var(--accent);
            font-variant-numeric:tabular-nums;margin-bottom:4px;}
        .cd-mdone span{font-size:12px;color:var(--text3);}
        .cd-mdone .best{color:#10b981;font-weight:800;}
        /* 마스터 학습 진행 표시 */
        .cd-mastery{display:flex;align-items:center;gap:7px;font-size:11px;
            color:var(--text3);margin:-4px 2px 8px;}
        .cd-mastery .bar{flex:1;height:5px;border-radius:99px;background:var(--bg2);overflow:hidden;}
        .cd-mastery .bar i{display:block;height:100%;width:0;border-radius:99px;
            background:linear-gradient(90deg,var(--accent),#10b981);transition:width .4s;}
        .cd-mastery b{color:var(--accent);font-variant-numeric:tabular-nums;}

        /* ═══════ 11.1 · 문제가 많아져도 편한 목록 · 페이지 넘기기 ═══════ */
        .cd-listbar{display:flex;align-items:center;gap:8px;margin:11px 0 2px;padding:7px 10px;
            border:1px solid var(--border);border-radius:10px;background:var(--bg2);}
        .cd-listbar>i{color:var(--text3);font-size:14px;flex:none;}
        .cd-listbar input{flex:1;min-width:0;border:none;outline:none;background:transparent;
            color:var(--text1);font-size:12.5px;font-weight:600;}
        .cd-listbar select{border:1px solid var(--border);background:var(--card);color:var(--text2);
            border-radius:8px;font-size:11px;font-weight:700;padding:4px 6px;outline:none;cursor:pointer;flex:none;}
        .cd-listbar .cd-count{white-space:nowrap;}
        .cd-pager{display:none;align-items:center;justify-content:center;gap:10px;margin-top:11px;
            font-size:11.5px;color:var(--text3);font-variant-numeric:tabular-nums;}
        .cd-pager button{border:1px solid var(--border);background:var(--bg2);color:var(--text1);
            border-radius:8px;cursor:pointer;padding:6px 12px;font-size:11.5px;font-weight:700;}
        .cd-pager button:hover:not(:disabled){border-color:var(--accent);color:var(--accent);}
        .cd-pager button:disabled{opacity:.35;cursor:default;}
        .cd-icobtn{width:32px;height:32px;flex:none;border:1px solid var(--border);background:var(--bg2);
            color:var(--text2);border-radius:8px;cursor:pointer;font-size:16px;
            display:flex;align-items:center;justify-content:center;}
        .cd-icobtn:hover{color:var(--accent);border-color:var(--accent);}
        /* 문제 관리 목록 */
        .cd-brlist{display:flex;flex-direction:column;gap:6px;margin-top:9px;}
        .cd-br{display:flex;align-items:flex-start;gap:9px;padding:10px 10px 9px;border-radius:10px;
            border:1px solid var(--border);background:var(--bg2);cursor:pointer;}
        .cd-br:hover{border-color:var(--accent);}
        .cd-br .n{flex:none;min-width:22px;height:22px;padding:0 5px;border-radius:6px;background:var(--card);
            border:1px solid var(--border);color:var(--text3);font-size:10.5px;font-weight:800;
            display:flex;align-items:center;justify-content:center;font-variant-numeric:tabular-nums;}
        .cd-br .q{flex:1;min-width:0;}
        .cd-br .q b{display:block;font-size:12.5px;font-weight:700;color:var(--text1);line-height:1.45;
            overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
        .cd-br .cs{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px;}
        .cd-br .cs em{font-style:normal;font-size:9.5px;font-weight:800;padding:2px 7px;border-radius:99px;
            background:var(--card);border:1px solid var(--border);color:var(--text3);}
        .cd-br .cs em.due{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,transparent);}
        .cd-br .cs em.bad{color:#ef4444;border-color:rgba(239,68,68,.4);}
        .cd-br .cs em.good{color:#059669;border-color:rgba(16,185,129,.4);}
        .dark .cd-br .cs em.good:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#34d399;}
        .cd-br .mo{width:26px;height:26px;flex:none;border:none;background:transparent;color:var(--text3);
            border-radius:7px;cursor:pointer;font-size:15px;}
        .cd-br .mo:hover{background:var(--card);color:var(--text1);}
        /* 뒤집기 카드 채점(2단계) */
        .cd-grade2{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;}
        .cd-grade2 button{padding:13px;border:none;border-radius:12px;cursor:pointer;
            font-size:13px;font-weight:800;}
        .cd-grade2 button:active{transform:scale(.97);}
        /* 시험 문항 수 고르기 */
        .cd-testpick{display:none;align-items:center;gap:7px;flex-wrap:wrap;margin-top:9px;
            padding:9px 10px;border:1px dashed color-mix(in srgb,var(--accent) 45%,var(--border));
            border-radius:11px;background:color-mix(in srgb,var(--accent) 6%,var(--bg2));}
        .cd-testpick.show{display:flex;}
        .cd-testpick b{font-size:11.5px;color:var(--text2);margin-right:2px;}
        .cd-testpick button{border:1px solid var(--border);background:var(--card);color:var(--text1);
            border-radius:8px;cursor:pointer;padding:6px 12px;font-size:11.5px;font-weight:800;}
        .cd-testpick button:hover{border-color:var(--accent);color:var(--accent);}
        /* 객관식 — 시험 모드는 정오답을 숨기고 고른 것만 표시 */
        .cd-opt.pick{border-color:var(--accent);
            background:color-mix(in srgb,var(--accent) 14%,transparent);font-weight:700;}
        .cd-opt.pick i.num{background:var(--accent);color:#fff;border-color:var(--accent);}
        /* 시험 성적표 */
        .cd-report{display:flex;flex-direction:column;gap:12px;padding:4px 0 2px;}
        .rep-top{display:flex;align-items:center;gap:14px;padding:14px;border-radius:14px;
            background:var(--bg2);border:1px solid var(--border);}
        .rep-score{width:78px;height:78px;flex:none;border-radius:50%;display:flex;
            align-items:center;justify-content:center;}
        .rep-score span{width:62px;height:62px;border-radius:50%;background:var(--card);
            display:flex;align-items:center;justify-content:center;
            font-size:18px;font-weight:900;color:var(--accent);}
        .rep-sum{flex:1;min-width:0;}
        .rep-sum b{display:block;font-size:14.5px;color:var(--text1);margin-bottom:3px;}
        .rep-sum span{font-size:11.5px;color:var(--text3);line-height:1.6;}
        .rep-wrong{display:flex;flex-direction:column;gap:8px;}
        .rep-w{padding:11px 12px;border-radius:11px;border:1px solid var(--border);background:var(--bg2);}
        .rep-w>b{display:block;font-size:12.5px;color:var(--text1);line-height:1.5;margin-bottom:6px;}
        .rep-w .a{font-size:11.5px;line-height:1.7;}
        .rep-w .a i{font-style:normal;font-weight:800;}
        .rep-w .mine{color:#ef4444;}
        .rep-w .real{color:#059669;}
        .dark .rep-w .real:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#34d399;}
        .rep-w .why{margin-top:6px;font-size:11px;color:var(--text3);line-height:1.65;white-space:pre-wrap;}
        @media(max-width:640px){
            .cd-br .q b{-webkit-line-clamp:3;}
            .cd-listbar{flex-wrap:wrap;}
        }
        @media(max-width:640px){
            .cd-modes{grid-template-columns:1fr;}
            .cd-grade button b{font-size:13px;}
        }
        .cd-desc{font-size:12px;color:var(--text3);line-height:1.75;margin:10px 0 11px;}
        .cd-prompt{width:100%;height:min(300px,42vh);padding:12px;border:1px solid var(--border);
            border-radius:11px;background:var(--bg2);color:var(--text1);font-size:11.5px;
            line-height:1.65;resize:vertical;outline:none;margin-bottom:11px;
            font-family:ui-monospace,SFMono-Regular,Menlo,monospace;}
        @media(max-width:640px){
            /* 10.9 · 모바일에서도 '음악 플레이어'와 똑같은 떠 있는 창 모양.
               (예전에는 전체 화면을 덮어서 뒤가 안 보였다) */
            .modal-bg .modal-box.cards-box{
                width:calc(100vw - 14px);max-width:calc(100vw - 14px) !important;
                height:auto;max-height:88dvh;
                border-radius:16px;padding:0 !important;}
            /* 배경을 화면에 정확히 맞춘다 (100vw 는 스크롤바 때문에 더 넓다) */
            #cardsModal{padding:0 !important;overflow:hidden;
                left:0;right:0;top:0;bottom:0;width:auto;height:auto;
                backdrop-filter:none !important;-webkit-backdrop-filter:none !important;}
            /* 안쪽이 스크롤되어야 시트가 화면을 넘지 않는다 */
            #cardsHome,#cardsStudy,#cardsPaste,#cardsStats,#cardsAnalytics,#cardsBrowse{flex:1;min-height:0;}
            .cd-inner{height:40vh;}
            .cd-grade button{padding:16px;font-size:14.5px;}
        }


        /* 6.13 카드 학습 단순화: 답 확인 후 자동 채점·자동 간격 반복 */
        #cardsModal{z-index:1700;backdrop-filter:none !important;-webkit-backdrop-filter:none !important;}
        #cardsModal .pl-mini{z-index:1805;}
        #cdAutoResult{min-height:25px;margin-top:11px;text-align:center;}
        .cd-explain{margin:8px 0 10px;padding:12px 13px;border-radius:12px;
            background:color-mix(in srgb,var(--accent) 7%,var(--bg2));
            border:1px solid color-mix(in srgb,var(--accent) 24%,var(--border));
            color:var(--text2);font-size:12.5px;line-height:1.7;white-space:pre-wrap;}
        .cd-explain::before{content:'해설';display:block;color:var(--accent);font-size:10.5px;
            font-weight:900;letter-spacing:.06em;margin-bottom:3px;}
        .cd-next{width:100%;margin-top:2px;padding:12px!important;}
        .cd-analytics{display:flex;flex-direction:column;gap:12px;}
        .ana-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;}
        .ana-kpi{padding:12px 5px;border:1px solid var(--border);border-radius:12px;background:var(--bg2);text-align:center;}
        .ana-kpi b{display:block;font-size:19px;color:var(--text1);}.ana-kpi span{font-size:10.5px;color:var(--text3);}
        .ana-sec{padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--bg2);}
        .ana-title{font-size:11.5px;font-weight:900;color:var(--text2);margin-bottom:9px;}
        .ana-days{display:flex;align-items:flex-end;gap:4px;height:92px;}
        .ana-day{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px;}
        .ana-day i{display:block;width:100%;max-width:18px;min-height:3px;border-radius:5px 5px 2px 2px;background:var(--accent);}
        .ana-day span{font-size:8.5px;color:var(--text3);white-space:nowrap;}
        .ana-row{display:grid;grid-template-columns:minmax(70px,1fr) 2fr auto;align-items:center;gap:8px;margin:7px 0;font-size:11.5px;}
        .ana-row .track{height:6px;border-radius:99px;background:var(--card);overflow:hidden;}
        .ana-row .track i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--accent),#8b5cf6);}
        .ana-row em{font-style:normal;color:var(--text3);font-size:10.5px;}
        .ana-weak{display:flex;align-items:center;gap:8px;padding:8px 0;border-top:1px dashed var(--border);font-size:11.5px;}
        .ana-weak:first-of-type{border-top:0}.ana-weak span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
        .ana-weak b{color:#ef4444;font-size:10.5px;}
        #cardsAnalytics{padding:14px 16px 16px;overflow-y:auto;min-height:0;}
        .cd-streak{flex:none;padding:3px 8px;border-radius:99px;
            background:color-mix(in srgb,#f59e0b 14%,var(--bg2));color:#b45309;
            font-size:10.5px;font-weight:800;white-space:nowrap;}
        .dark .cd-streak:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#fbbf24;}
        .cd-quiz{position:relative;}
        .cd-quiz.cd-cheer .cd-qq{animation:cdHappy .48s cubic-bezier(.2,.9,.3,1);}
        @keyframes cdHappy{0%{transform:scale(1)}45%{transform:scale(1.018);box-shadow:0 8px 24px rgba(16,185,129,.16)}100%{transform:scale(1)}}
        .cd-spark{position:absolute;z-index:4;left:50%;top:42%;pointer-events:none;
            font-size:16px;animation:cdSpark .62s ease-out forwards;}
        @keyframes cdSpark{from{opacity:1;transform:translate(-50%,-50%) scale(.5)}
            to{opacity:0;transform:translate(calc(-50% + var(--sx)),calc(-50% + var(--sy))) scale(1.15)}}
        .cd-memory{margin:4px 0 15px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--bg2);}
        .cd-memory .line{height:7px;border-radius:99px;background:linear-gradient(90deg,#f59e0b 0%,#60a5fa 48%,#10b981 100%);margin:10px 0 6px;position:relative;}
        .cd-memory .dot{position:absolute;top:50%;width:13px;height:13px;border-radius:50%;background:var(--card);border:3px solid var(--accent);transform:translate(-50%,-50%);}
        .cd-memory small{font-size:11px;color:var(--text3);}
        .cd-topbar .cd-back[title="학습 나가기"]{color:#e74c3c;}

        /* ===== 서버 상태 계기판 (자동차 게이지) ===== */
        .srv-gauge{width:40px;height:26px;cursor:pointer;flex:none;display:flex;
            align-items:center;justify-content:center;border-radius:8px;
            transition:background .15s;}
        .srv-gauge:hover{background:var(--bg2);}
        .srv-gauge svg{width:38px;height:24px;overflow:visible;}
        /* 세 구간을 늘 함께 보여 주고, 바늘이 어디를 가리키는지로 상태를 읽는다 */
        .srv-zone{fill:none;stroke-width:3.6;stroke-linecap:butt;opacity:.30;
            transition:opacity .35s;}
        .srv-zone.z-bad{stroke:#ef4444;}
        .srv-zone.z-warn{stroke:#f59e0b;}
        .srv-zone.z-good{stroke:#10b981;}
        /* 지금 해당하는 구간만 진하게 */
        .srv-gauge.bad  .z-bad,
        .srv-gauge.warn .z-warn,
        .srv-gauge.good .z-good{opacity:1;stroke-width:4.4;}
        /* ★ transform-box 를 쓰면 선 자체의 상자가 기준이 되어 바늘이 옆으로 틀어진다.
           SVG 좌표 그대로 회전해야 중심(20,21)에 정확히 박힌다. */
        /* 회전 기준을 SVG 사용자 좌표(20,21)로 못박는다.
           transform-box:view-box 를 빼면 선 자신의 상자가 기준이 돼 옆으로 틀어진다. */
        .srv-needle{transform-box:view-box;transform-origin:20px 21px;
            transition:transform .6s cubic-bezier(.34,1.25,.5,1);}
        .srv-needle line{stroke:var(--text1);stroke-width:1.9;stroke-linecap:round;}
        .srv-hub{fill:var(--text1);}
        .srv-hub2{fill:var(--card);}
        .srv-gauge.bad{animation:srvPulse 1.6s ease-in-out infinite;}
        @keyframes srvPulse{0%,100%{opacity:1}50%{opacity:.55}}
        /* 14.72.4 · '확인 불가'(상태 요청 실패) 는 부하 읽기 값이 없다.
           빨강·0점(=진짜 과부하) 과 구별되게 구간도 바늘도 눕히고 흐리게만 둔다. */
        .srv-gauge.down{opacity:.62;}
        .srv-gauge.down .srv-zone,.srv-gauge.down .srv-needle{opacity:.22;}
        /* 상세 팝오버 */
        .srv-pop{position:fixed;z-index:1650;width:min(296px,92vw);display:none;
            background:var(--card);border:1px solid var(--border);border-radius:14px;
            box-shadow:var(--shadow-lg);padding:13px 14px;}
        .srv-pop.show{display:block;}
        .srv-pop h4{display:flex;align-items:center;gap:7px;font-size:13.5px;
            font-weight:800;color:var(--text1);margin-bottom:3px;}
        .srv-dot{width:9px;height:9px;border-radius:50%;background:#10b981;flex:none;}
        .srv-pop.warn .srv-dot{background:#f59e0b;} .srv-pop.bad .srv-dot{background:#ef4444;}
        .srv-pop.down .srv-dot{background:#9aa3b0;}
        .srv-sub{font-size:11.5px;color:var(--text3);margin-bottom:11px;}
        .srv-row{display:flex;align-items:center;gap:8px;margin:7px 0;font-size:11.5px;color:var(--text2);}
        .srv-row b{flex:none;width:52px;font-weight:600;color:var(--text2);}
        .srv-track{flex:1;min-width:64px;height:7px;border-radius:99px;background:var(--bg2);overflow:hidden;
            box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 55%,transparent);}
        /* width 전환은 일부 모바일 Chrome에서 팝오버가 display:none→block 될 때
           첫 계산값(0)을 붙잡는 일이 있어, 항상 100%인 막대를 scaleX로 그린다. */
        .srv-fillbar{display:block;height:100%;width:100%;border-radius:99px;background:#10b981;
            transform-origin:left center;transform:scaleX(var(--srv-pct,0));
            transition:transform .5s cubic-bezier(.2,.8,.3,1),background .4s;will-change:transform;}
        .srv-fillbar.w{background:#f59e0b;} .srv-fillbar.b{background:#ef4444;}
        .srv-val{flex:none;min-width:74px;text-align:right;color:var(--text3);
            font-variant-numeric:tabular-nums;white-space:nowrap;}
        @media(max-width:640px){ .srv-gauge{width:34px;height:24px;} .srv-gauge svg{width:32px;} }

        /* ===== 알림 센터 ===== */
        .notif-btn{position:relative;overflow:visible!important;}
        .notif-badge{position:absolute;right:-2px;top:-3px;min-width:17px;height:17px;padding:0 4px;
            border-radius:99px;background:var(--notif-dot);color:var(--notif-dot-ink);font-size:9.5px;font-weight:900;
            align-items:center;justify-content:center;border:2px solid var(--bg);line-height:13px;}
        .notif-pop{position:fixed;z-index:1660;display:none;width:min(380px,calc(100vw - 16px));
            max-height:min(620px,78dvh);overflow:hidden;flex-direction:column;
            background:var(--card);border:1px solid var(--border);border-radius:16px;
            box-shadow:var(--shadow-lg);}
        .notif-pop.show{display:flex;animation:notifIn .18s cubic-bezier(.2,.85,.3,1);}
        @keyframes notifIn{from{opacity:0;transform:translateY(-6px) scale(.985)}to{opacity:1;transform:none}}
        .notif-head{display:flex;align-items:center;gap:10px;padding:13px 13px 11px;border-bottom:1px solid var(--border);}
        .notif-head>div{flex:1;display:flex;align-items:center;gap:9px;}.notif-head b{font-size:15px;}
        .notif-head span{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;color:#059669;font-weight:700;}
        .notif-head span i{width:7px;height:7px;border-radius:50%;background:#10b981;box-shadow:0 0 0 3px rgba(16,185,129,.12);}
        .notif-head button{border:0;background:var(--bg2);color:var(--text3);border-radius:8px;padding:6px 8px;font-size:10.5px;cursor:pointer;}
        .notif-list{overflow-y:auto;padding:6px;min-height:80px;}
        .notif-item{display:grid;grid-template-columns:34px minmax(0,1fr) 28px;gap:9px;align-items:start;
            padding:10px 8px;border-radius:11px;position:relative;}
        .notif-item:hover{background:var(--bg2)}.notif-item.unread{background:color-mix(in srgb,var(--accent) 7%,transparent);}
        .notif-ico{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
            background:color-mix(in srgb,var(--accent) 12%,var(--bg2));color:var(--accent);font-size:17px;}
        .notif-item[data-kind="error"] .notif-ico,.notif-item[data-kind="server"] .notif-ico{background:rgba(239,68,68,.11);color:#ef4444;}
        .notif-item[data-kind="study"] .notif-ico{background:rgba(245,158,11,.13);color:#d97706;}
        .notif-item[data-kind="achievement"] .notif-ico{background:rgba(16,185,129,.12);color:#059669;}
        .notif-copy{min-width:0}.notif-copy b{display:block;font-size:12.5px;color:var(--text1);line-height:1.35;}
        .notif-copy p{font-size:11.5px;color:var(--text2);line-height:1.5;margin-top:3px;word-break:break-word;}
        .notif-copy time{display:block;font-size:9.5px;color:var(--text3);margin-top:4px;}
        .notif-del{width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:var(--text3);cursor:pointer;}
        .notif-del:hover{background:rgba(239,68,68,.1);color:#ef4444;}
        .notif-empty{padding:34px 12px;text-align:center;color:var(--text3);font-size:12px;line-height:1.7;}
        .notif-foot{padding:8px 12px;border-top:1px solid var(--border);color:var(--text3);font-size:9.5px;text-align:center;}
        @media(max-width:640px){
            .notif-pop{left:6px!important;right:6px!important;top:58px!important;width:auto;max-height:70dvh;border-radius:15px;}
        }

        .editor-body::-webkit-scrollbar{width:8px;}
        .editor-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px;}

        /* ================= 5.34 UI 폴리시 ================= */
        :root{
            --grad:linear-gradient(135deg,#6366f1 0%,#8b5cf6 55%,#ec4899 120%);
            --shadow-lg:0 18px 44px -14px rgba(30,40,90,.20);
        }
        .dark{ --shadow-lg:0 18px 44px -14px rgba(0,0,0,.6); }
        ::selection{background:rgba(99,102,241,.28);}
        *::-webkit-scrollbar{width:9px;height:9px;}
        *::-webkit-scrollbar-thumb{background:var(--border);border-radius:8px;border:2px solid var(--bg);}
        *::-webkit-scrollbar-thumb:hover{background:var(--text3);}
        *{scrollbar-width:thin;scrollbar-color:var(--border) transparent;}

        /* 헤더: 글래스 + 헤어라인 그라데이션 */
        .header{backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
            background:var(--bg);
            background:color-mix(in srgb, var(--bg) 84%, transparent);
            border-bottom:none;}
        .header::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:1px;pointer-events:none;
            background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--border) 70%,var(--accent) 30%) 20%,color-mix(in srgb,var(--border) 70%,var(--accent) 30%) 80%,transparent);}

        /* 카드: 등장 애니메이션 없음 (로딩 때 띠용거림 제거) */
        .note-card,.folder-card{
            border-radius:12px;
            box-shadow:0 1px 2px rgba(16,24,40,.06),0 10px 26px -14px rgba(16,24,40,.14);}
        .dark .note-card:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark .folder-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){box-shadow:0 1px 2px rgba(0,0,0,.4),0 12px 30px -14px rgba(0,0,0,.5);}
        .note-card:hover,.folder-card:hover{
            transform:translateY(-5px) scale(1.012);
            box-shadow:var(--shadow-lg);
            border-color:color-mix(in srgb, var(--accent) 45%, var(--border));}
        .note-card::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:13;
            background:linear-gradient(115deg,transparent 32%,rgba(255,255,255,.14) 48%,transparent 62%);
            transform:translateX(-130%);transition:transform .55s ease;}
        .note-card:hover::after{transform:translateX(130%);}
        .dark .note-card:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{background:linear-gradient(115deg,transparent 32%,rgba(255,255,255,.06) 48%,transparent 62%);}
        /* 미리보기 로딩 시 튀는(띠용) 애니메이션 제거: transform 전환 없이 바로 표시 */
        .note-preview-frame{transition:none;}
        .folder-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;z-index:13;
            background:var(--grad);opacity:0;transition:opacity .25s;}
        .folder-card:hover::before{opacity:1;}

        /* 에디터 툴바 글래스 + 버튼 마이크로인터랙션 */
        .editor-toolbar{backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
            background:var(--bg);background:color-mix(in srgb, var(--bg) 86%, transparent);}
        .tool-btn{border-radius:9px;transition:background .16s,color .16s,transform .1s;}
        .tool-btn:active{transform:scale(.88);}
        .tool-btn.active{background:var(--grad);color:#fff;
            box-shadow:0 3px 12px -2px rgba(99,102,241,.55);}

        /* 종이: 깊이감 */
        .paper{box-shadow:0 1px 3px rgba(16,24,40,.10),0 18px 44px -18px rgba(16,24,40,.28);border-radius:0;}
        .dark .paper:not(:where(.sdy-editor-light,.sdy-editor-light *)){box-shadow:0 1px 3px rgba(0,0,0,.5),0 20px 50px -18px rgba(0,0,0,.7);}

        /* 모달/토스트/컨텍스트: 글래스 + 깊이 */
        .modal-bg{backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);}
        .modal-box{border-radius:16px;box-shadow:var(--shadow-lg);
            border-color:color-mix(in srgb, var(--border) 55%, var(--accent) 15%);}
        .toast{border-radius:12px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
            background:var(--card);background:color-mix(in srgb, var(--card) 88%, transparent);
            color:var(--text1);font-weight:600;
            box-shadow:var(--shadow-lg);}
        .ctx-menu{border-radius:12px;overflow:hidden;
            backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
            background:var(--card);background:color-mix(in srgb, var(--card) 90%, transparent);
            box-shadow:var(--shadow-lg);}
        .ctx-item{transition:background .14s,transform .14s;}
        .ctx-item:hover{background:color-mix(in srgb, var(--accent) 12%, transparent);
            transform:translateX(2px);}

        /* 포커스 가시성(접근성) */
        button:focus-visible,input:focus-visible,select:focus-visible{
            outline:2px solid color-mix(in srgb, var(--accent) 70%, transparent);
            outline-offset:2px;border-radius:8px;}
        /* ================= /5.34 ================= */

        /* ================= 5.35 ================= */
        /* 첫 화면 가독성 + 부드러움 */
        body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
            text-rendering:optimizeLegibility;}
        .note-card-name{font-size:13.5px;font-weight:700;letter-spacing:-.01em;color:var(--text1);}
        .note-card,.folder-card{
            transition:transform .26s cubic-bezier(.22,.9,.32,1),
                        box-shadow .26s cubic-bezier(.22,.9,.32,1),
                        border-color .26s cubic-bezier(.22,.9,.32,1);}
        .note-card::after{transition:transform .45s cubic-bezier(.22,.9,.32,1);}
        /* 카드 렌더 격리 → 스크롤/호버 시 리페인트 범위 축소 (버벅임 감소) */
        .note-card,.folder-card{contain:layout paint style;}
        /* 글래스 블러 완화 → 스크롤 성능 개선 (모바일) */
        .header{backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);}
        .editor-toolbar{backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);}
        /* ================= /5.35 ================= */

        /* ================= 6.1 ================= */
        /* 전체 번역 진행률 바 */
        #trProg{position:fixed;top:10px;left:50%;transform:translateX(-50%);z-index:1600;
            width:min(420px,86vw);background:var(--card);border:1px solid var(--border);
            border-radius:99px;box-shadow:var(--shadow-lg);padding:6px 12px;display:none;
            align-items:center;gap:10px;}
        #trProg .tr-track{flex:1;height:6px;border-radius:4px;background:var(--bg2);overflow:hidden;}
        #trProg .tr-fill{display:block;height:100%;width:0;background:var(--grad);
            border-radius:4px;transition:width .25s;}
        #trProg .tr-label{font-size:11px;font-weight:700;color:var(--text2);
            white-space:nowrap;max-width:46vw;overflow:hidden;text-overflow:ellipsis;}
#trProg .tr-cancel{flex:none;border:none;border-radius:99px;cursor:pointer;
    background:var(--bg2);color:var(--text2);font-size:11px;font-weight:800;
    padding:5px 11px;line-height:1;transition:background .15s,color .15s;}
#trProg .tr-cancel:hover{background:#e5484d;color:#fff;}
#trProg .tr-cancel:active{transform:scale(.96);}
#trProg .tr-fill.indet{width:38%;transition:none;
    animation:trIndet 1.15s ease-in-out infinite;}
@keyframes trIndet{0%{margin-left:0}50%{margin-left:62%}100%{margin-left:0}}
        /* 11.3 · '예전 버전 화면' 안내 바 */
        #staleBar{position:fixed;left:50%;top:10px;transform:translateX(-50%);z-index:3000;
            display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center;
            max-width:min(680px,94vw);padding:10px 14px;border-radius:14px;
            background:color-mix(in srgb,var(--card) 94%,transparent);
            border:1px solid color-mix(in srgb,#f59e0b 55%,var(--border));
            box-shadow:0 12px 34px rgba(0,0,0,.22);backdrop-filter:blur(10px);
            animation:staleIn .3s cubic-bezier(.22,.9,.3,1.08);}
        @keyframes staleIn{from{opacity:0;transform:translateX(-50%) translateY(-12px)}
                           to{opacity:1;transform:translateX(-50%)}}
        #staleBar>i{color:#f59e0b;font-size:18px;flex:none;}
        #staleBar b{font-size:13px;color:var(--text1);flex:none;}
        #staleBar span{font-size:11.5px;color:var(--text3);flex:1;min-width:180px;line-height:1.5;}
        #staleBar button{flex:none;border:none;border-radius:10px;cursor:pointer;
            background:var(--accent);color:#fff;font-size:12.5px;font-weight:800;padding:8px 14px;}
        #staleBar button:hover{filter:brightness(1.08);}
        @media(max-width:640px){ #staleBar{left:8px;right:8px;transform:none;max-width:none;}
            @keyframes staleIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}} }
        /* ================= /6.1 ================= */
    

/* === style block 2 === */
@keyframes spin{to{transform:rotate(360deg)}}

/* === style block 3 === */

.mp{position:fixed;left:50%;transform:translateX(-50%);bottom:24px;z-index:1500;
    display:flex;align-items:center;gap:10px;width:min(680px,95vw);padding:7px 11px;
    background:var(--card);border:1px solid var(--border);border-radius:14px;
    box-shadow:0 8px 30px rgba(0,0,0,.18);
    transition:all .38s cubic-bezier(.22,.9,.3,1.12);}
/* 19.0 · 플로팅 모드는 #musicPlayer 가 아니라 전용 음반(#mpDisc)이 맡는다 —
   이 자리의 옛 .mp-float 규칙(64px 원형·conic 진행링·모서리 재생 버튼)은
   16.1 스킨이 #musicPlayer .mp-cover 크기(50px)를 ID 선택자로 덮어 쓰면서
   표지가 중앙에서 4px 어긋나고 진행링이 스킨 배경과 싸우던 근원이라 아래
   '19.0 플로팅 음반' 블록으로 통째로 옮겨 다시 만들었다. */
.mp-cover{width:42px;height:42px;border-radius:8px;object-fit:cover;flex:none;background:var(--bg2);}
@keyframes mpspin{to{transform:rotate(360deg)}}
.mp-spin{display:inline-block;animation:mpspin .9s linear infinite;}
/* 11.5 · 머리말의 아주 작은 새로고침 버튼 */
.mpb-head .mpb-mini{width:16px;height:16px;min-width:16px;padding:0;margin-left:1px;
    border:none;background:transparent;color:var(--text3);border-radius:5px;
    font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;
    cursor:pointer;opacity:.65;flex:none;}
.mpb-head .mpb-mini:hover{opacity:1;color:var(--accent);background:var(--bg);}
.mpb-head .mpb-mini.spin i{display:inline-block;animation:mpspin .9s linear infinite;}
.mpb-head .mpb-mini[disabled]{opacity:.4;cursor:default;}
/* 11.4 · 새로고침 버튼 (도는 동안 회전) */
.mpb-icon.spin i,.mp-addpl.spin i{display:inline-block;animation:mpspin .9s linear infinite;}
.mpb-icon[disabled],.mp-addpl[disabled]{opacity:.55;cursor:default;}
.mp-emptybox{padding:22px 14px;text-align:center;color:var(--text3);font-size:12.5px;line-height:1.75;}
.mp-emptybox b{display:block;color:var(--text1);font-size:13.5px;margin-bottom:4px;}
.mp-emptybox button{margin-top:11px;border:1px solid var(--accent);background:var(--accent);
    color:#fff;border-radius:10px;cursor:pointer;padding:9px 16px;font-size:12.5px;font-weight:800;
    display:inline-flex;align-items:center;gap:6px;}
.mp-emptybox button:hover{filter:brightness(1.08);}
.mp-emptybox .sub{font-size:11px;opacity:.8;margin-top:7px;}
.mp-mid{flex:1;min-width:0;}
.mp-line1{display:flex;align-items:center;gap:6px;min-width:0;}
.mp-title{font-size:12.5px;font-weight:700;color:var(--text1);white-space:nowrap;
    overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;}
/* 지금 재생목록으로 듣는 중이면 알려 준다 */
.mp-badge{flex:none;font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:99px;
    background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);
    max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ── 진행바: 얇게 두되 잡기 쉽게 (위아래 여백이 터치 영역) ── */
.mp-prog{position:relative;height:4px;background:var(--bg2);border-radius:99px;
    margin:6px 0 3px;cursor:pointer;touch-action:none;
    transition:height .12s ease;}
.mp-prog::before{content:'';position:absolute;left:0;right:0;top:-9px;bottom:-9px;}
.mp-prog:hover,.mp-prog.seeking{height:7px;}
.mp-buf{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:99px;
    background:var(--border);opacity:.75;}
#mpFill{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:99px;
    background:linear-gradient(90deg,var(--accent),var(--accent2));}
.mp-knob{position:absolute;top:50%;left:0;width:11px;height:11px;border-radius:50%;
    background:var(--accent);border:2px solid var(--card);box-shadow:0 1px 4px rgba(0,0,0,.3);
    transform:translate(-50%,-50%) scale(0);transition:transform .12s ease;pointer-events:none;}
.mp-prog:hover .mp-knob,.mp-prog.seeking .mp-knob{transform:translate(-50%,-50%) scale(1);}
/* 드래그 중 위에 뜨는 시간 말풍선 */
.mp-seektip{position:absolute;bottom:16px;left:0;transform:translateX(-50%);
    padding:3px 7px;border-radius:6px;background:var(--text1);color:var(--bg);
    font-size:10.5px;font-weight:700;white-space:nowrap;opacity:0;pointer-events:none;
    transition:opacity .12s;}
.mp-prog.seeking .mp-seektip{opacity:1;}
.mp-time{display:flex;align-items:center;font-size:11px;font-weight:600;color:var(--text2);}
.mp-time #mpCur{color:var(--text1);font-weight:700;}
.mp-time #mpDur{color:var(--text2);font-weight:600;}
.mp-time .mp-sp{flex:1;}
.mp-dur{cursor:pointer;}
.mp-btns{display:flex;gap:3px;align-items:center;flex:none;}
.mp-btns button,#mpX{width:28px;height:28px;border:none;background:transparent;color:var(--text2);
    border-radius:8px;cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center;
    transition:background .15s,color .15s;}
.mp-btns button:hover,#mpX:hover{background:var(--bg2);color:var(--text1);}
.mp-btns button:active{transform:scale(.92);}
.mp-btns button.on{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent);}
/* 재생 버튼만 강조 — 눈이 갈 곳을 하나로 */
.mp-btns .mp-pp{width:34px;height:34px;font-size:18px;background:transparent;color:var(--text1);
    border-radius:50%;box-shadow:none;border:none;}
.mp-btns .mp-pp:hover{background:transparent;color:var(--accent);filter:none;}
.mp-rate{font-size:11px !important;font-weight:800;}

/* 부가 버튼은 눌렀을 때만 펼친다 (평소엔 4개만 = 심플) */
/* 더보기 묶음은 '떠 있는 판'으로 연다.
   예전엔 줄 안에 끼어들어(display:flex) 열 때마다 ⋯ 버튼이 옆으로 밀렸다
   → 같은 자리에서 눌러 열고 닫기가 어려웠다. 이제 버튼은 제자리에 고정. */
.mp-xtra{display:none;position:absolute;right:0;bottom:calc(100% + 8px);
    align-items:center;gap:4px;padding:6px;border-radius:12px;
    background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow-lg);
    z-index:5;}
.mp-xtra .mp-narrow{display:none !important;}   /* 기본 숨김 — 좁은 폰에서만 켠다 */
.mp-xtra.show{display:flex;}
.mp-xtra button{background:var(--bg2) !important;color:var(--text2);border:1px solid transparent;border-radius:8px;transition:all .18s ease;}
.mp-xtra button:hover{background:var(--bg3,var(--bg2)) !important;color:var(--text1);}
.mp-xtra button.on{background:color-mix(in srgb,var(--accent) 18%,var(--bg2)) !important;color:var(--accent) !important;border-color:color-mix(in srgb,var(--accent) 40%,transparent) !important;font-weight:700;box-shadow:0 0 8px color-mix(in srgb,var(--accent) 25%,transparent);}
.mp-xtra button.on i{color:var(--accent) !important;}
.mp-xtra button:active{transform:scale(.92);}
.mp-xtra-btn.on{background:color-mix(in srgb,var(--accent) 15%,transparent) !important;
    color:var(--accent) !important;}
.mp-btns{position:relative;}
@media(max-width:640px){
  /* 14.14 · 크기·위치(.mp / .mp-cover / .mp-btns / #mpX / .mp-title)는
     문서 끝 v1414-phone 블록 한 곳에서만 정한다. 여기는 그 외의
     레이아웃 규칙만 남긴다. */
  /* 진행바가 손가락으로 잡을 만큼 넓어야 한다 → 중앙에 우선권 */
  .mp-mid{flex:1 1 auto;min-width:0;}
  .mp-btns{flex:0 0 auto;}
  /* 아주 좁은 폰: 이전/다음은 더보기 안으로 내려 진행바를 넓게 쓴다
     (곡 넘기기는 더보기 · 목록 · Shift+←/→ 로 그대로 가능) */
  @media(max-width:430px){
    .mp-bar .mp-btns>#mpPrev,.mp-bar .mp-btns>#mpNext{display:none;}
    .mp-xtra.show .mp-narrow{display:flex !important;}
  }
  .mp-time{font-size:10px;}
  /* 버튼이 늘어도 넘치지 않게 3열로 접는다 (위치는 위 공통 규칙을 따름) */
  .mp-xtra.show{display:grid;grid-template-columns:repeat(3,1fr);padding:7px;gap:5px;}
  .mp-xtra.show button{width:38px;height:38px;font-size:17px;}
}

.mp-volwrap{position:relative;}
.mp-volpop{position:absolute;bottom:32px;left:50%;transform:translateX(-50%);
    background:var(--card);border:1px solid var(--border);border-radius:8px;
    padding:8px 6px;display:none;box-shadow:var(--shadow);z-index:1502;}
.mp-volpop.show{display:block;}
.mp-volpop input{writing-mode:vertical-lr;direction:rtl;width:22px;height:90px;cursor:pointer;}
.mp-list{position:fixed;bottom:92px;left:50%;transform:translateX(-50%);z-index:1501;
    width:min(440px,92vw);max-height:min(560px,78vh);overflow:hidden;display:none;
    flex-direction:column;
    background:var(--card);border:1px solid var(--border);border-radius:12px;
    box-shadow:var(--shadow);padding:8px;}
.mp-list .mp-search{width:100%;box-sizing:border-box;padding:7px 10px;margin-bottom:6px;font-size:1.35rem;
    border:1px solid var(--border);border-radius:8px;background:var(--bg2);
    color:var(--text1);font-size:12px;outline:none;}
.mp-tabs{display:flex;align-items:center;gap:4px;margin-bottom:6px;}
.mp-tabs button{border:1px solid var(--border);background:var(--bg2);color:var(--text2);
    border-radius:8px;cursor:pointer;padding:5px 10px;font-size:11.5px;font-weight:600;}
.mp-tabs button.on{background:var(--accent);color:#fff;border-color:var(--accent);}
.mp-tabs .sp{flex:1;}
.mp-addpl{margin-left:auto;width:22px;height:22px;border-radius:50%;padding:0!important;
    display:flex;align-items:center;justify-content:center;font-size:14px;line-height:1;}
.mp-pl{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;
    font-size:12.5px;color:var(--text1);cursor:pointer;}
.mp-pl:hover{background:var(--bg2);}
.mp-pl.on{background:rgba(79,110,247,.15);color:var(--accent);font-weight:700;}
.mp-pl b{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;}
.mp-pl em{color:var(--text3);font-style:normal;font-size:10.5px;flex:none;}
.mp-pl i{color:var(--text3);font-size:14px;flex:none;padding:2px;cursor:pointer;font-style:normal;}
.mp-pl i:hover{color:#ef4444;}
.mp-li .pl-add{color:var(--text3);font-size:14px;flex:none;padding:2px;cursor:pointer;font-style:normal;}
.mp-li .pl-add:hover{color:var(--accent);}
/* 재생목록 선택 드롭다운 (스크롤 가능) */
#plPickPop{position:fixed;z-index:1503;background:var(--card);border:1px solid var(--border);
    border-radius:10px;box-shadow:var(--shadow);padding:6px;display:none;
    max-height:min(320px,60vh);overflow:auto;width:min(280px,86vw);}
.plpick-item{display:flex;align-items:center;gap:7px;padding:7px 9px;border-radius:6px;
    font-size:12.5px;color:var(--text1);cursor:pointer;}
.plpick-item:hover{background:var(--bg2);}
.plpick-item b{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;}
.plpick-item em{color:var(--text3);font-style:normal;font-size:10.5px;flex:none;}
.plpick-item.on{background:rgba(79,110,247,.15);color:var(--accent);}
.plpick-item.new{color:var(--accent);font-weight:700;}
/* 재생목록 내용(곡 목록) */
.mp-pl .pl-play{color:var(--accent);font-size:14px;flex:none;padding:2px;cursor:pointer;font-style:normal;}
.mp-pl.drop{outline:2px dashed var(--accent);outline-offset:-2px;background:rgba(79,110,247,.10);}
.mp-plsub{display:flex;align-items:center;gap:6px;padding:5px 8px 5px 30px;border-radius:6px;
    font-size:12px;color:var(--text2);}
.mp-plsub .pl-rm{color:var(--text3);font-size:12px;flex:none;padding:2px;cursor:pointer;font-style:normal;margin-left:auto;}
.mp-plsub .pl-rm:hover{color:#ef4444;}
.mp-plsub.empty{color:var(--text3);font-style:italic;}
.mp-li.dragsrc{opacity:.5;}
.mp-lbody{flex:1;min-height:60px;overflow:auto;}
.mp-li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;
    font-size:12px;color:var(--text1);cursor:pointer;}
.mp-li:hover{background:var(--bg2);}
.mp-li.on{background:rgba(79,110,247,.15);color:var(--accent);font-weight:700;}
.mp-li span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mp-li em{color:var(--text3);font-style:normal;font-size:10px;flex:none;}
.mp-li .mp-del{color:#ef4444;cursor:pointer;font-size:14px;flex:none;padding:2px;}
.mp-lfoot{display:flex;align-items:center;justify-content:center;gap:10px;
    padding-top:6px;font-size:11px;color:var(--text3);}

/* ── 재생목록 UI 정리 (심플 + 터치) ─────────────────────── */
.mp-pl{gap:6px;}
.mp-pl .pl-exp{transition:transform .15s;color:var(--text3);}
.mp-pl.open .pl-exp{transform:rotate(90deg);}
.mp-pl.open{background:var(--bg2);}
.mp-pl b{cursor:pointer;}
.mp-pl em{min-width:18px;text-align:right;}
.mp-pl i:hover{color:var(--accent);}
.mp-pl [data-plmenu]:hover{color:var(--text1);}
.mp-plsub{padding-left:34px;cursor:pointer;}
.mp-plsub:hover{background:var(--bg2);}
.mp-plsub span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mp-plempty{padding:22px 10px;text-align:center;color:var(--text3);font-size:12.5px;}
.mp-plempty em{display:block;margin-top:4px;font-style:normal;font-size:11px;opacity:.8;}
.mp-li .mp-cur{color:var(--accent);margin-right:5px;font-size:12px;}
.pl-mini{position:fixed;z-index:1805;background:var(--card);border:1px solid var(--border);
    border-radius:10px;box-shadow:var(--shadow-lg);padding:4px;min-width:120px;}
.pl-mini button{display:block;width:100%;text-align:left;padding:9px 12px;border:none;
    background:transparent;color:var(--text1);font-size:12.5px;border-radius:7px;cursor:pointer;}
.pl-mini button:hover{background:var(--bg2);}
.pl-mini button.d{color:#ef4444;}
/* 모바일: 목록을 아래에서 올라오는 시트로 */
@media(max-width:640px){
  /* 14.14 · .mp-list 위치·크기는 문서 끝 v1414-phone 에서만 정한다 */
  .mp-li,.mp-pl{padding:11px 10px;font-size:13.5px;}
  .mp-plsub{padding:10px 10px 10px 34px;font-size:13px;}
  .mp-li i,.mp-pl i{font-size:17px;padding:5px;}
  .mp-tabs button{padding:8px 12px;font-size:12.5px;}
  .mp-list .mp-search{padding:10px 12px;font-size:13px;}
}

.mp-lfoot button{border:1px solid var(--border);background:var(--bg2);color:var(--text1);
    border-radius:6px;cursor:pointer;padding:3px 8px;font-size:11px;}
#mpReopen{position:fixed;right:14px;bottom:max(14px,env(safe-area-inset-bottom));z-index:1500;
    width:42px;height:42px;border-radius:50%;border:none;background:var(--accent);color:#fff;
    font-size:19px;box-shadow:0 6px 18px rgba(0,0,0,.25);cursor:pointer;display:none;
    align-items:center;justify-content:center;}
/* 12.0 · 첫 로딩(스플래시) 동안에도 음악 플로팅 칩을 바로 보여준다 */
body.sdy-booting #mpReopen,
body.sdy-booting #musicPlayer,
body.sdy-booting #musicListPop{z-index:10001;}
/* 14.14 · 이 자리에 있던 폰 규칙(.mp / .mp-cover / .mp-btns button / .mp-list)은
   문서 끝 v1414-phone 블록 로 옮겼다.
   위쪽 18680행대 블록과 값이 서로 달라(예: .mp-btns button 이 34px vs 25px)
   파일 순서로 승자가 정해지고 있었다. 중복을 없애고 한 곳에서만 정한다. */

/* ═════════ 10.1 · 큰 플로팅 뮤직플레이어 (스포티파이/Apple Music 풍) ═════════ */
.mpb{position:fixed;z-index:1504;display:none;flex-direction:column;
    width:min(600px,96vw);max-height:92vh;
    background:var(--card);border:1px solid var(--border);border-radius:16px;
    box-shadow:0 18px 60px rgba(0,0,0,.28);overflow:hidden;}
.mpb.open{display:flex;animation:mpbIn .3s cubic-bezier(.22,.9,.3,1.08);}
@keyframes mpbIn{from{opacity:0;transform:translateY(30px) scale(.96);}to{opacity:1;transform:none;}}
.mpb-head{display:flex;align-items:center;gap:6px;padding:2px 6px;flex:none;
    background:var(--bg2);border-bottom:1px solid var(--border);
    cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;min-height:18px;}
.mpb-head:active{cursor:grabbing;}
.mpb-head>i{color:var(--text3);font-size:12px;opacity:.7;}
.mpb-head .sp{flex:1;}
.mpb-head button{width:20px;height:18px;border:none;background:transparent;color:var(--text3);
    border-radius:6px;cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;padding:0;}
.mpb-head button:hover{background:var(--bg);color:var(--text1);}
.mpb-body{display:flex;flex-direction:column;min-height:0;flex:1;padding:12px 12px 10px;gap:10px;overflow:hidden;}
.mpb-now{display:flex;gap:14px;flex:none;}
.mpb-cover{width:132px;height:132px;border-radius:12px;object-fit:cover;flex:none;
    background:var(--bg2);box-shadow:0 6px 18px rgba(0,0,0,.16);cursor:pointer;
    user-select:none;-webkit-user-drag:none;touch-action:manipulation;}
.mpb-cover:hover{filter:brightness(1.06);}
.mpb-cover.spin{animation:mpspin 7s linear infinite;}
.mpb-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.mpb-title{font-size:16px;font-weight:800;color:var(--text1);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mpb-artist{font-size:13px;font-weight:700;color:var(--accent);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;}
.mpb-album{font-size:11.5px;color:var(--text3);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mpb-chips{display:flex;gap:5px;flex-wrap:wrap;min-height:18px;}
.mpb-chips span{font-size:10px;font-weight:700;padding:2px 8px;border-radius:99px;
    background:var(--bg2);color:var(--text3);border:1px solid var(--border);
    max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-chips span.src{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 35%,transparent);}
/* 10.9 · 자동으로 찾은 곡 표시 — 체크표시 하나만 (출처·제목 글자 없음) */
.mpb-chips span.src.ok{padding:2px 6px;display:inline-flex;align-items:center;justify-content:center;
    max-width:none;background:color-mix(in srgb,var(--accent) 12%,transparent);}
.mpb-chips span.src.ok i{font-size:12px;line-height:1;}
.mpb-prog{position:relative;height:5px;background:var(--bg2);border-radius:99px;
    margin:6px 0 2px;cursor:pointer;touch-action:none;
    user-select:none;-webkit-user-select:none;}
.mpb-prog::before{content:'';position:absolute;left:0;right:0;top:-10px;bottom:-10px;}
/* 17.4 · 위치를 잡는 동안 — 막대가 살짝 굵어지고 손잡이가 커진다 (아래 컨트롤 바와 동일) */
.mpb-prog.seeking{height:8px;cursor:grabbing;}
.mpb-prog.seeking #mpBKnob{
    transform:translate(-50%,-50%) scale(1.28);
    box-shadow:0 2px 10px color-mix(in srgb,var(--accent) 55%,rgba(0,0,0,.3));}
#mpBig.mpb-fs .mpb-prog.seeking #mpBKnob,#mpBig:fullscreen .mpb-prog.seeking #mpBKnob{opacity:1;}
#mpBFill{position:absolute;left:0;top:0;bottom:0;width:0;border-radius:99px;
    background:linear-gradient(90deg,var(--accent),var(--accent2));}
#mpBKnob{position:absolute;top:50%;left:0;width:13px;height:13px;border-radius:50%;
    background:var(--accent);border:2px solid var(--card);box-shadow:0 1px 5px rgba(0,0,0,.3);
    transform:translate(-50%,-50%);pointer-events:none;}
/* 시간 표시는 평소엔 숨기고, 재생 위치를 잡을 때만 잠깐 뜬다 (현재 | 전체).
   17.4 · 진행바 위에 오버레이로 띄운다 — 레이아웃에서 빠져 있어야(display:none)
   시간이 나타날 때 막대가 아래로 밀리지 않는다.
   (#mpBTime 은 #mpBProg 안에 있다: position:absolute + bottom:100% 로 막대를 안 밀고
   그 위쪽 공간만 비친다.) */
.mpb-time{position:absolute;left:0;right:0;bottom:calc(100% + 8px);
  display:none;align-items:center;justify-content:center;font-size:11.5px;color:var(--text1);gap:7px;letter-spacing:.01em;
  opacity:0;visibility:hidden;transform:translateY(4px);pointer-events:none;
  transition:opacity .22s ease,transform .22s ease,visibility .22s;}
.mpb-time.show{display:flex !important;opacity:1;visibility:visible;transform:translateY(0);}
.mpb-time .sep{opacity:.6;color:var(--text2);}
.mpb-time .current{color:var(--text1);font-weight:700;font-variant-numeric:tabular-nums;}
.mpb-time .end{font-variant-numeric:tabular-nums;color:var(--text2);font-weight:600;}
.mpb-ctl{display:flex;align-items:center;justify-content:center;gap:8px;}
.mpb-ctl button{width:36px;height:36px;border:none;background:transparent;color:var(--text2);
    border-radius:10px;cursor:pointer;font-size:19px;display:flex;align-items:center;justify-content:center;}
.mpb-ctl button:hover{background:var(--bg2);color:var(--text1);}
.mpb-ctl button:active{transform:scale(.93);}
.mpb-ctl button.on{color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent);}
.mpb-ctl .pp{width:50px;height:50px;font-size:24px;background:transparent;color:var(--text1);
    border-radius:50%;box-shadow:none;border:none;}
.mpb-ctl .pp:hover{background:transparent;color:var(--accent);filter:none;}
.mpb-row2{display:flex;align-items:center;gap:7px;}
.mpb-row2 button{height:28px;padding:0 9px;border:1px solid var(--border);background:var(--bg2);
    color:var(--text2);border-radius:8px;cursor:pointer;font-size:11px;font-weight:700;
    display:flex;align-items:center;gap:4px;}
.mpb-row2 button:hover{color:var(--text1);border-color:var(--text3);}
.mpb-row2 button.on{color:var(--accent);border-color:var(--accent);}
.mpb-vol{flex:1;display:flex;align-items:center;gap:7px;min-width:60px;color:var(--text3);}
.mpb-vol input{flex:1;accent-color:var(--accent);min-width:40px;}
.mpb-tabs{display:flex;gap:4px;flex:none;align-items:center;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
.mpb-tabs::-webkit-scrollbar{display:none;}
.mpb-tabs button{border:1px solid var(--border);background:var(--bg2);color:var(--text2);
    border-radius:8px;cursor:pointer;padding:5px 11px;font-size:11.5px;font-weight:700;
    white-space:nowrap;flex:none;}
.mpb-tabs button.on{background:var(--accent);color:#fff;border-color:var(--accent);}
/* 10.9 · 아이콘만 있는 검색 버튼 */
.mpb-tabs button.mpb-icon{padding:0;width:29px;height:26px;display:flex;align-items:center;
    justify-content:center;font-size:15px;}
.mpb-tabs button.mpb-icon:hover{color:var(--text1);border-color:var(--text3);}
.mpb-tabs button.mpb-icon.on{background:var(--accent);color:#fff;border-color:var(--accent);}
.mpb-searchbar{display:none;align-items:center;gap:8px;flex:none;
    padding:7px 13px;border:1px solid var(--border);border-radius:999px;background:var(--bg2);
    transition:border-color .2s,box-shadow .2s;}
.mpb-searchbar.show{display:flex;}
/* 17.4 · 검색칸은 옆 칩들과 같은 둥근 알약 모양으로 — 포커스될 때만 은은하게 켜진다 */
.mpb-searchbar:focus-within{
    border-color:color-mix(in srgb,var(--accent) 55%,var(--border));
    box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent);}
.mpb-searchbar>i{color:var(--text3);font-size:14px;flex:none;}
.mpb-searchbar input{flex:1;min-width:0;border:none;background:transparent;outline:none;
    color:var(--text1);font-size:12.5px;font-weight:600;}
.mpb-searchbar button{border:none;background:transparent;color:var(--text3);cursor:pointer;
    font-size:15px;line-height:1;padding:2px 3px;border-radius:50%;flex:none;}
.mpb-searchbar button:hover{color:var(--text1);background:var(--bg);}
.mpb-list{flex:1;min-height:70px;overflow:auto;border-top:1px solid var(--border);padding-top:6px;}
.mpb-li{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;
    font-size:12.5px;color:var(--text1);cursor:pointer;flex-wrap:nowrap;min-width:0;}
.mpb-li:hover{background:var(--bg2);}
.mpb-li.on{background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent);font-weight:700;}
.mpb-li span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-li em{color:var(--text3);font-style:normal;font-size:10.5px;flex:0 1 auto;max-width:42%;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* 18.3 · 대기열 관리: 위로/아래로/다음에 재생/빼기 + 전체 비우기 */
.mpb-qhead{display:flex;align-items:center;justify-content:space-between;gap:8px;
    padding:3px 8px 7px;font-size:11px;font-weight:700;color:var(--text3);}
.mpb-qclear{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border);
    background:var(--bg2);color:var(--text2);border-radius:7px;cursor:pointer;
    padding:3px 9px;font-size:10.5px;font-weight:700;white-space:nowrap;}
.mpb-qclear:hover{color:var(--accent);border-color:var(--accent);}
.mpb-qops{display:flex;align-items:center;gap:1px;flex:none!important;margin-left:2px;}
.mpb-qop{width:22px;height:22px;border:none;background:transparent;color:var(--text3);
    border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;
    padding:0;flex:0 0 auto;font-size:12px;opacity:.55;transition:opacity .12s,color .12s,background .12s;}
.mpb-li:hover .mpb-qop,.mpb-qop:focus-visible{opacity:1;}
.mpb-qop:hover{background:var(--bg2);color:var(--text1);opacity:1;}
.mpb-qop.del:hover{color:#ef4444;}
/* 폰에서는 관리 버튼이 항상 보이도록 */
@media(max-width:640px){
  .mpb-qop{opacity:.85;width:26px;height:26px;font-size:13px;}
}
.mpb-artgrp{font-size:11px;font-weight:800;color:var(--text2);padding:7px 8px 3px;
    display:flex;align-items:center;gap:6px;white-space:nowrap;min-width:0;overflow:hidden;}
.mpb-artgrp em{color:var(--text3);font-style:normal;font-weight:600;flex:none;}
.mpb-empty{padding:18px 10px;text-align:center;color:var(--text3);font-size:12px;}
@media(max-width:640px){
    .mpb{width:calc(100vw - 14px);max-height:88vh;}
    .mpb-cover{width:92px;height:92px;}
    .mpb-title{font-size:14.5px;}
    .mpb-ctl button{width:38px;height:38px;}
    .mpb-ctl .pp{width:46px;height:46px;}
    /* 10.9 · 탭 + 검색 아이콘이 좁은 화면에서도 넘치지 않게 */
    .mpb-tabs{flex-wrap:wrap;gap:3px;}
    .mpb-tabs button{padding:5px 9px;font-size:11px;}
    .mpb-tabs button.mpb-icon{width:28px;}
    #mpBUp{padding:5px 8px !important;font-size:11px !important;}
}

/* 10.5 · 큰 표지: 표지는 정지. 재생 시작 순간 LP판이 잠깐 튀어나왔다가
   다시 커버 안으로 숨는 한 번의 연출만 (계속 걸쳐 있지 않게) */
.mpb-cwrap{position:relative;flex:none;width:132px;height:132px;}
.mpb-vinyl{position:absolute;left:4px;top:0;width:132px;height:132px;border-radius:50%;
    background:repeating-radial-gradient(circle at 50% 50%,#15151a 0 2.5px,#23232b 2.5px 5px);
    box-shadow:0 5px 16px rgba(0,0,0,.4);z-index:1;
    transform:translateX(4px);opacity:0;pointer-events:none;}
.mpb-vinyl::after{content:'';position:absolute;left:50%;top:50%;width:40px;height:40px;
    transform:translate(-50%,-50%);border-radius:50%;
    background:var(--accent);opacity:.92;
    box-shadow:0 0 0 6px rgba(0,0,0,.35),inset 0 0 0 1px rgba(255,255,255,.2);}
.mpb-cwrap.playing .mpb-vinyl{animation:vinylPop 1.15s cubic-bezier(.3,.7,.3,1) forwards;}
@keyframes vinylPop{
    0%{transform:translateX(4px);opacity:0;}
    18%{opacity:1;}
    45%{transform:translateX(56px);opacity:1;}   /* 잠깐 밖으로 */
    100%{transform:translateX(6px);opacity:0;}   /* 다시 커버 안으로 */}
.mpb-cwrap .mpb-cover{position:relative;z-index:2;width:132px;height:132px;}
/* 컨트롤 바로 작아지며 닫히는 애니메이션 */
.mpb.closing{animation:mpbOut .26s cubic-bezier(.5,0,.8,.4) forwards;}
@keyframes mpbOut{to{opacity:0;transform:translateY(46px) scale(.72);}}
/* ═══════ 11.7 · 싱크 가사 — 애플뮤직 스타일 ═══════
   · 굵고 큰 글씨, 왼쪽 정렬
   · 현재 줄은 또렷하고 살짝 커지며 강조색, 멀어질수록 부드럽게 흐려짐
   · 글자 크기는 절대 바뀌지 않는다(transform 만 사용) → 줄 높이가 변하지 않아
     현재 줄이 화면 한가운데에서 밀려나지 않는다 */
.mpb-list.lyrmode{display:flex;flex-direction:column;overflow:hidden;padding-top:0;border-top:0;}
.mpb-list.lyrmode .mpb-lyr{flex:1;min-height:0;}
.mpb-lyr{position:relative;flex:1;min-height:80px;overflow-y:auto;overflow-x:hidden;
    display:block;padding:0 clamp(12px,3.5%,30px);text-align:left;
    /* 12.1 · 랩·빠른 곡에서도 가사 줄이 바로바로 따라오도록 즉시 이동 (smooth 는 밀린다) */
    scroll-behavior:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;
    -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 8%,#000 85%,transparent 100%);
    mask-image:linear-gradient(180deg,transparent 0%,#000 8%,#000 85%,transparent 100%);}
/* 첫 줄·끝 줄도 한가운데까지 올라오게 하는 위·아래 빈 자리 */
.mpb-lyr .lyrpad{display:block;height:44%;min-height:60px;pointer-events:none;}
.mpb-lyr .ll{display:block;margin:0;padding:9px 2px;
    font-size:clamp(15.5px,1.45vw,21px);line-height:1.36;font-weight:800;
    letter-spacing:-.016em;color:var(--text1);
    opacity:.26;filter:blur(2px);
    transform:scale(.985);transform-origin:left center;
    /* 12.1 · 하이라이트가 즉각 반응하도록 0.55s → 0.16s (빠른 곡 대응) */
    transition:opacity .16s ease,
               filter .16s ease,
               transform .16s cubic-bezier(.2,.8,.2,1.03),
               color .12s ease;
    cursor:pointer;white-space:pre-wrap;word-break:keep-all;
    -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
    text-rendering:optimizeLegibility;}
/* 지금 부르는 줄 */
.mpb-lyr .ll.now{opacity:1;filter:none;transform:scale(1.055);font-weight:900;
    color:var(--accent);
    text-shadow:0 2px 22px color-mix(in srgb,var(--accent) 26%,transparent);}
/* 가까울수록 또렷하게 */
.mpb-lyr .ll.n1{opacity:.72;filter:blur(.2px);transform:scale(1);}
.mpb-lyr .ll.n2{opacity:.5;filter:blur(.75px);transform:scale(.995);}
.mpb-lyr .ll.n3{opacity:.36;filter:blur(1.3px);transform:scale(.99);}
.mpb-lyr .ll.past{opacity:.2;}
/* 전주·간주·아웃트로 — 부를 가사가 없을 땐 앞뒤 줄을 또렷하게 */
.mpb-lyr .ll.edge{opacity:.88;filter:none!important;transform:scale(1);}
/* 휠·손가락으로 직접 넘기는 동안에는 흐림을 전부 푼다 */
.mpb-lyr.manual .ll{filter:none!important;opacity:.8;transform:scale(1);
    transition:opacity .12s,filter .12s,transform .12s;}
.mpb-lyr.manual .ll.now{opacity:1;transform:scale(1.03);}
.mpb-lyr .ll:hover{opacity:.95;filter:none;}
/* 싱크 없이 그냥 가사만 있는 곡 */
.mpb-lyr.plain{-webkit-mask-image:none;mask-image:none;}
.mpb-lyr.plain .ll{opacity:.92;filter:none;transform:none;font-weight:600;cursor:default;
    font-size:14.5px;line-height:1.7;padding:2px 2px;color:var(--text1);}
.mpb-lyr.plain .lyrpad{height:10px;min-height:10px;}
.mpb-lyrhead{display:flex;align-items:center;justify-content:center;gap:6px;flex:none;
    padding:2px 0 6px;font-size:10.5px;font-weight:800;color:var(--text3);}
@media(max-width:640px){
    .mpb-lyr{padding:0 14px;}
    .mpb-lyr .ll{font-size:16.5px;padding:10px 2px;}
}
.mpb-lyrempty{padding:26px 12px;text-align:center;color:var(--text3);font-size:12px;line-height:1.7;}
.mp-lyrfind{margin-top:12px;padding:7px 16px;border:1px solid #3b4252;border-radius:8px;background:#1a1e27;color:#dbe2f0;cursor:pointer;font-size:13px;}
.mp-lyrfind:hover{background:#232936;border-color:#4a5470;}
@media(max-width:640px){
    .mpb-lyr{padding:0 14px;}
    .mpb-lyr .ll{font-size:15px;padding:9px 3px;}
}
/* 포맷(음질) 뱃지 */
.mpb-chips span.fmt{color:var(--text1);font-weight:800;
    border-color:color-mix(in srgb,var(--text2) 40%,transparent);}
.mpb-chips span.fmt.lossless{color:var(--accent);
    border-color:color-mix(in srgb,var(--accent) 45%,transparent);}

/* 10.8 · 크기 조절 손잡이 제거 — 창은 황금비(가로:세로 = 1.618:1) 고정 */
/* 10.3 · 곡 우클릭 메뉴 */
.mpctx{position:fixed;z-index:1806;min-width:196px;max-width:280px;display:none;
    background:var(--card);border:1px solid var(--border);border-radius:11px;
    box-shadow:var(--shadow-lg);padding:5px;user-select:none;}
.mpctx.show{display:block;animation:mpbIn .14s ease-out;}
.mpctx .ci{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:7px;
    font-size:12.5px;color:var(--text1);cursor:pointer;font-weight:600;}
.mpctx .ci i{color:var(--text3);font-size:15px;flex:none;}
.mpctx .ci:hover{background:var(--bg2);}
.mpctx .ci:hover i{color:var(--accent);}
.mpctx .ci.danger{color:#ef4444;}
.mpctx .ci.danger i{color:#ef4444;}
.mpctx .cinfo{padding:7px 10px 8px;border-bottom:1px solid var(--border);margin-bottom:4px;}
.mpctx .cinfo b{display:block;font-size:12.5px;color:var(--text1);line-height:1.35;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpctx .cinfo span{display:block;font-size:10.5px;color:var(--text3);margin-top:2px;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpctx .csep{height:1px;background:var(--border);margin:4px 6px;}
/* 큰 플레이어 목록 페이저 */
.mpb-pager{display:flex;align-items:center;justify-content:center;gap:12px;
    padding:6px 0 2px;font-size:11px;color:var(--text3);flex:none;flex-wrap:nowrap;white-space:nowrap;}
.mpb-pager button{border:1px solid var(--border);background:var(--bg2);color:var(--text1);
    border-radius:7px;cursor:pointer;padding:4px 10px;font-size:11px;font-weight:700;white-space:nowrap;flex:none;}
.mpb-pager button:disabled{opacity:.35;cursor:default;}
@media(max-width:640px){
    .mpb-cwrap{width:96px;height:96px;}
    .mpb-vinyl{width:96px;height:96px;}
    .mpb-cwrap .mpb-cover{width:96px;height:96px;}
    .mpb-vinyl::after{width:30px;height:30px;}
    .mpb-cwrap.playing .mpb-vinyl{transform:translateX(38px);}
}

/* ── 태그·표지 편집 창 ── */
.mp-tagm{position:fixed;inset:0;z-index:1506;display:none;
    align-items:center;justify-content:center;background:rgba(15,18,25,.45);
    padding:14px;}
.mp-tagm.show{display:flex;}
.mp-tagm .box{width:min(420px,94vw);max-height:88vh;overflow:auto;background:var(--card);
    border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);}
.mp-tagm .head{display:flex;align-items:center;gap:8px;padding:12px 14px;
    border-bottom:1px solid var(--border);font-size:13.5px;color:var(--text1);}
.mp-tagm .head b{display:flex;align-items:center;gap:7px;flex:1;}
.mp-tagm .head b i{color:var(--accent);}
.mp-tagm .head button{width:28px;height:28px;border:none;background:transparent;color:var(--text3);
    font-size:17px;cursor:pointer;border-radius:7px;}
.mp-tagm .head button:hover{background:var(--bg2);color:var(--text1);}
.mp-tagm .inner{padding:13px 14px;display:flex;flex-direction:column;gap:9px;}
.mp-tagm .crow{display:flex;gap:12px;align-items:center;}
.mp-tagm .crow img{width:84px;height:84px;border-radius:10px;object-fit:cover;
    background:var(--bg2);flex:none;box-shadow:0 3px 10px rgba(0,0,0,.15);}
.mp-tagm .cbtns{display:flex;flex-direction:column;gap:6px;}
.mp-tagm .cbtns button{height:30px;padding:0 10px;border:1px solid var(--border);background:var(--bg2);
    color:var(--text2);border-radius:8px;cursor:pointer;font-size:11.5px;font-weight:700;
    display:flex;align-items:center;gap:5px;}
.mp-tagm .cbtns button:hover{color:var(--text1);border-color:var(--text3);}
.mp-tagm label{display:flex;flex-direction:column;gap:3px;font-size:11px;font-weight:700;
    color:var(--text3);}
.mp-tagm .two{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;width:100%;align-items:stretch;}
.mp-tagm .two label{min-width:0;width:auto;}
.mp-tagm input[type=text]{height:34px;width:100%;min-width:0;max-width:100%;display:block;box-sizing:border-box;padding:0 10px;border:1px solid var(--border);border-radius:8px;
    background:var(--bg2);color:var(--text1);font-size:13px;outline:none;}
.mp-tagm input[type=text]:focus{border-color:var(--accent);}
.mp-tagm textarea{box-sizing:border-box;width:100%;min-height:110px;max-height:220px;resize:vertical;
    padding:7px 10px;border:1px solid var(--border);border-radius:8px;
    background:var(--bg2);color:var(--text1);font-size:11.5px;line-height:1.6;outline:none;
    font-family:ui-monospace,'SF Mono',Menlo,monospace;}
.mp-tagm textarea:focus{border-color:var(--accent);}
.mp-tagm label em{font-size:9.5px;color:var(--text3);font-style:normal;}
.mp-tagm .hint{font-size:10.5px;color:var(--text3);line-height:1.5;}
.mp-tagm .acts{display:flex;gap:6px;flex-wrap:wrap;border-top:1px solid var(--border);
    padding:10px 14px;}
.mp-tagm .acts button{height:34px;padding:0 12px;border-radius:9px;cursor:pointer;
    font-size:12px;font-weight:700;border:1px solid var(--border);background:var(--bg2);color:var(--text1);}
.mp-tagm .acts button:hover{border-color:var(--text3);}
.mp-tagm .acts #mpTagRecog.off{opacity:.55;}
.mp-tagm .acts .primary{margin-left:auto;background:var(--accent);border-color:var(--accent);color:#fff;}
.mp-tagm .acts .primary:hover{filter:brightness(1.07);}
/* 12.0 · 노래 추가 팝업 (파일 or 유튜브 링크 → mp3 320kbps) */
.mp-addpop{position:fixed;z-index:2600;display:none;width:min(360px,calc(100vw - 20px));
    background:var(--card);border:1px solid var(--border);border-radius:14px;
    box-shadow:0 22px 60px rgba(0,0,0,.32);padding:12px;flex-direction:column;gap:10px;}
.mp-addpop.show{display:flex;}
.mp-addpop .head{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:800;color:var(--text1);}
.mp-addpop .head>i{color:var(--accent);font-size:17px;}
.mp-addpop .head .sp{flex:1;}
.mp-addpop .head button{width:28px;height:28px;border:none;background:transparent;color:var(--text3);border-radius:8px;cursor:pointer;font-size:16px;}
.mp-addpop .head button:hover{background:var(--bg2);}
.mp-addpop .file{display:flex;align-items:center;gap:11px;width:100%;padding:11px 12px;
    border:1px solid var(--border);border-radius:11px;background:var(--bg2);cursor:pointer;text-align:left;}
.mp-addpop .file:hover{border-color:var(--accent);}
.mp-addpop .file>i{font-size:22px;color:var(--accent);}
.mp-addpop .file span{display:flex;flex-direction:column;font-size:13px;font-weight:700;color:var(--text1);}
.mp-addpop .file em{font-style:normal;font-size:10.5px;color:var(--text3);font-weight:400;margin-top:2px;}
.mp-addpop .sep{display:flex;align-items:center;gap:8px;font-size:10.5px;color:var(--text3);font-weight:700;}
.mp-addpop .sep::before,.mp-addpop .sep::after{content:'';flex:1;height:1px;background:var(--border);}
.mp-addpop .row{display:flex;gap:7px;}
.mp-addpop input{flex:1;min-width:0;padding:10px 11px;border:1px solid var(--border);border-radius:10px;
    background:var(--bg2);color:var(--text1);font-size:13px;outline:none;}
.mp-addpop input:focus{border-color:var(--accent);}
.mp-addpop .go{display:inline-flex;align-items:center;gap:5px;padding:0 14px;border:none;border-radius:10px;
    background:var(--accent);color:#fff;font-size:12.5px;font-weight:800;cursor:pointer;white-space:nowrap;}
.mp-addpop .go:hover{filter:brightness(1.07);}
.mp-addpop .go:disabled{opacity:.55;cursor:default;}
.mp-addpop .hint{font-size:10.5px;color:var(--text3);line-height:1.5;}
.mp-addpop .status{font-size:11.5px;color:var(--text2);background:var(--bg2);border:1px solid var(--border);
    border-radius:9px;padding:8px 10px;line-height:1.6;max-height:84px;overflow-y:auto;}
.mp-addpop .status b{color:var(--accent);}
.mp-addpop .cookies{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--text3);
    background:var(--bg2);border:1px dashed var(--border);border-radius:9px;padding:6px 8px;}
.mp-addpop .cookies span{flex:1;line-height:1.4;}
.mp-addpop .cookies button{border:1px solid var(--border);background:var(--card);color:var(--text2);
    border-radius:7px;cursor:pointer;font-size:10.5px;font-weight:700;padding:3px 8px;white-space:nowrap;}
.mp-addpop .cookies button:hover{border-color:var(--accent);color:var(--accent);}
.mp-addpop .cookies button.ok{border-color:#10b981;color:#10b981;}
/* 12.3 · 준비 상태 쿠키 카드 (예전 회색 안내문 대체) */
.mp-addpop .ytcard{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:11px;
    border:1px solid var(--border);background:linear-gradient(180deg,var(--bg2),var(--card));}
.mp-addpop .ytcheck{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;
    background:var(--bg2);color:var(--text3);font-size:13px;flex:none;border:1px solid var(--border);}
.mp-addpop .ytcheck.ok{background:#10b98114;border-color:#10b98155;color:#10b981;}
.mp-addpop .ytcheck.no{background:#f59e0b14;border-color:#f59e0b55;color:#f59e0b;}
.mp-addpop .ytcheck i{font-size:13px;}
.mp-addpop .yttext{flex:1;font-size:11.5px;color:var(--text2);line-height:1.4;min-width:0;}
.mp-addpop .yttext b{color:var(--text1);font-weight:700;}
.mp-addpop .ytup{border:1px solid var(--accent);background:var(--accent);color:#fff;
    border-radius:8px;cursor:pointer;font-size:10.5px;font-weight:800;padding:5px 10px;white-space:nowrap;}
.mp-addpop .ytup.ok{background:transparent;color:var(--accent);}
.mp-addpop .ytdel{width:24px;height:24px;border:none;background:transparent;color:var(--text3);
    border-radius:7px;cursor:pointer;font-size:14px;display:none;flex:none;}
.mp-addpop .ytcard.has .ytdel{display:inline-flex;align-items:center;justify-content:center;}
.mp-addpop .ytdel:hover{background:var(--bg2);color:#e74c3c;}
/* 진행 큐 + 게이지바 */
.mp-addpop .queue{display:flex;flex-direction:column;gap:6px;}
.mp-addpop .qbar{height:6px;border-radius:99px;background:var(--bg2);overflow:hidden;border:1px solid var(--border);}
.mp-addpop .qfill{height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,var(--accent),#8b5cf6);
    transition:width .35s cubic-bezier(.22,.9,.3,1);}
.mp-addpop .qmeta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text3);}
.mp-addpop .qmeta b{color:var(--text1);font-weight:800;}
.mp-addpop .qcur{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text2);}
.mp-addpop .qlist{display:flex;flex-direction:column;gap:4px;max-height:120px;overflow-y:auto;}
.mp-addpop .qitem{display:flex;align-items:center;gap:7px;font-size:11px;padding:4px 7px;border-radius:7px;}
.mp-addpop .qitem.run{background:var(--bg2);}
.mp-addpop .qitem .qi{width:14px;text-align:center;flex:none;}
.mp-addpop .qitem .qt{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text2);}
.mp-addpop .qitem.ok .qi{color:#10b981;}
.mp-addpop .qitem.fail .qi{color:#e74c3c;}
.mp-addpop .qitem.fail .qt{color:#e74c3c;}
.mp-addpop .ready{width:7px;height:7px;border-radius:50%;background:var(--text3);flex:none;display:inline-block;}
.mp-addpop .ready.ok{background:#10b981;box-shadow:0 0 0 3px #10b98122;}
.mp-addpop .ready.no{background:#f59e0b;}


/* === style block 4 === */

/* 시작 화면에서는 장식용 집게를 숨긴다. */
#splash:not(.hide)~#clawFx,body.sdy-booting #clawFx{display:none!important}

/* 8.8 responsive pass: phone and tablet prioritize the current task, not decorative controls */
@media (max-width:1024px){
  .link-bar{display:none!important}.header{position:sticky}.app-brand h1{max-width:42vw}
  /* 9.2 · 좁아지면 가운데 정렬을 포기하고 한 줄 가로 스크롤로 바꾼다.
     (grid 3분할을 유지하면 가운데 묶음이 찌그러진다)
     15.27 · ⑨ 유리 툴바 규칙(파일 아래쪽 display:grid!important · 3칸 그리드)이
     이 규칙을 이기고 있어서 641~1024px 에서 도구가 서로 겹쳤다. 같은 선택자를
     한 번 더 얹어 좁은 화면에서는 '한 줄 가로 스크롤' 이 이기게 되살린다. */
  .editor-toolbar,html.theme-pro .editor-toolbar{
      display:flex!important;overflow-x:auto!important;overflow-y:hidden!important;
      gap:4px;padding:6px!important;min-height:48px;flex-wrap:nowrap;align-items:center;
      -webkit-overflow-scrolling:touch;touch-action:pan-x;overscroll-behavior-x:contain;scrollbar-width:thin}
  .editor-toolbar::-webkit-scrollbar,html.theme-pro .editor-toolbar::-webkit-scrollbar{display:none}
  /* 가로 스크롤 모드에서는 세 묶음 모두 '줄어들지 않게' 고정한다.
     (flex 기본값인 shrink 가 걸리면 제목칸이 0px 로 찌부러진다) */
  .editor-toolbar .tb-left{flex:0 0 auto;justify-self:auto}
  .editor-toolbar .tb-mid,.editor-toolbar .tb-right{flex:0 0 auto;justify-self:auto}
  /* 제목은 자리를 다 차지하지 않게 고정폭으로 (스크롤 없이 도구가 먼저 보이도록) */
  .editor-toolbar #edTitle{flex:0 0 auto;width:150px;min-width:110px}
  .editor-toolbar #saveState,.editor-toolbar #liveBadge,.editor-toolbar #zoomLabel{display:none!important}
  .editor-toolbar .tb-group{padding:0;background:transparent;border:0}
  .cards-box{width:min(600px,96vw);max-height:88dvh}.cards-head{padding:12px 14px}
  #cardsHome,#cardsStudy,#cardsPaste,#cardsStats,#cardsAnalytics,#cardsBrowse{padding:12px;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .cd-inner{height:min(42dvh,290px)}
  /* 14.14 · 태블릿 폭에서만. 폰(≤640px)은 문서 끝 v1414-phone 이 좌우를
     직접 잡으므로 여기서 max-width 를 또 걸면 규칙이 둘로 갈린다. */
  @media (min-width:641px){
    .mp{max-width:calc(100vw - 12px)!important}.mp-list{max-width:calc(100vw - 12px)!important}
  }
  .ctx-menu.show{max-width:calc(100vw - 16px)!important;max-height:calc(100dvh - 16px)!important;
      overflow-x:hidden!important;overflow-y:auto!important;overscroll-behavior:contain}
}
@media (max-width:640px){
  /* Android Chrome는 html/body를 동시에 스크롤러로 두면 카드에서 시작한 스와이프가
     루트 스크롤로 전달되지 않는 경우가 있다. 홈/폴더 전용 스크롤러를 하나만 두어
     Chrome·Samsung Internet 모두 같은 경로로 스크롤하게 한다. */
  html,body{width:100%;height:100%;overflow:hidden!important}
  body{min-height:100%;touch-action:auto;overscroll-behavior-y:auto}
  #mainView{position:fixed!important;inset:0!important;width:100%;height:100dvh!important;
      min-height:0!important;overflow-x:hidden!important;overflow-y:scroll!important;
      overscroll-behavior-y:auto;-webkit-overflow-scrolling:touch;touch-action:pan-y;
      scrollbar-gutter:auto}
  #mainView main{min-height:calc(100dvh - 42px);padding-bottom:max(112px,env(safe-area-inset-bottom))!important;touch-action:pan-y}
  .vault-desk,#cardsHome,#cardsStudy,#cardsPaste,#cardsStats,#cardsAnalytics,#cardsBrowse{touch-action:pan-y;-webkit-overflow-scrolling:touch}
  /* 카드 위에서 시작한 Android Chrome 스와이프도 반드시 폴더 목록 스크롤로 보낸다. */
  #noteGrid,.note-card,.folder-card,.note-preview,.note-card-name{touch-action:pan-y!important}
  /* 14.14 · 헤더/본문/툴바 크기와 음악바·목록 위치는 문서 끝
     v1414-phone 블록 한 곳에서만 정한다. (여기 값들과 위쪽 블록들이
     서로 달라 파일 순서로 승자가 갈리고 있었다.) 여기는 '무엇을 숨길지' 등
     겹치지 않는 규칙만 남긴다. */
  .hdr-right>#vaultBtn,.hdr-right>#adminToggleBtn{display:none!important}
  .search-wrap{display:none!important}
  .editor-toolbar .tool-cat{height:34px;padding:0 8px;font-size:12px}.editor-toolbar .tool-cat .caret{font-size:11px}
  .page-badge{height:30px;padding:0 6px;font-size:11px}
  .pg-nav{padding:2px 5px!important}.pg-nav input{width:32px;height:22px;font-size:12px}
  .pg-nav .tot{font-size:11px}
  .side-bar,.side-open{display:none!important}
  .side-panel{left:0!important}.side-panel.show{width:min(82vw,300px)!important}
  .editor-body{overflow:auto!important;padding:6px 2px 100px!important;
    overflow-anchor:none;
}
  /* 펜 색·굵기·도형 툴바도 화면 안에서 가로 스와이프 */
  .draw-toolbar{left:6px!important;right:6px!important;
      top:calc(var(--sdy-edbar-bottom, 56px) + 8px)!important;bottom:auto!important;
      width:auto!important;max-width:none!important;transform:none!important;overflow-x:auto!important;
      justify-content:flex-start;white-space:nowrap;padding:7px 9px!important;z-index:1350!important;
      -webkit-overflow-scrolling:touch;touch-action:pan-x}
  /* 모바일 길게 누르기 메뉴는 항상 화면 아래 시트로 열고 내부만 스크롤 */
  .ctx-menu.show{left:8px!important;right:8px!important;top:auto!important;
      bottom:max(8px,env(safe-area-inset-bottom))!important;width:auto!important;min-width:0!important;
      max-height:min(68dvh,560px)!important;overflow-x:hidden!important;overflow-y:auto!important;
      overscroll-behavior:contain;border-radius:16px!important;padding:7px!important}
  .ctx-menu.show .ctx-item{padding:12px 13px!important;font-size:14px!important;border-radius:10px!important}
  .vd-selbar{position:sticky;top:0;z-index:8;background:var(--vd-field);box-shadow:0 7px 18px -12px rgba(0,0,0,.22)}
  .vd-selbar.on{background:var(--vd-acc-soft)}
  #vaultList .vd-item,#stkList .v-file{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
  .cards-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}.cards-actions .cd-btn{width:100%;padding:10px 7px}
  .cd-statrow{grid-template-columns:repeat(3,1fr)}.cd-stat{padding:9px 2px}.cd-memory{padding:10px}.cd-opts{gap:6px}.cd-opt{padding:12px 10px;font-size:13px}
  /* 14.14 · 음악바/목록의 크기·위치는 문서 끝 v1414-phone 에서만 정한다.
     (여기서 .mp-btns button 을 29px 로 줄이던 규칙이 위쪽 34px 규칙을
     덮어써서 단추가 손가락보다 작아져 있었다.) */
}


/* === style block 5 === */

#focusClock{position:fixed;inset:0;z-index:2100;display:none;flex-direction:column;
    align-items:center;justify-content:center;gap:0;
    padding:74px 12px calc(118px + env(safe-area-inset-bottom));box-sizing:border-box;
    /* 11.7 · 뒤 화면은 은은히 비치되, 숫자가 확실히 읽히도록 더 진하게 */
    background:color-mix(in srgb,var(--bg) 82%,transparent);
    backdrop-filter:blur(26px) saturate(135%) brightness(1.02);
    -webkit-backdrop-filter:blur(26px) saturate(135%) brightness(1.02);
    color:var(--text1);user-select:none;-webkit-user-select:none;
    animation:fcFade .28s ease;overflow:hidden;}
#focusClock.show{display:flex;}
#focusClock.closing{animation:fcFadeOut .22s ease forwards;}
@keyframes fcFade{from{opacity:0;backdrop-filter:blur(0)}to{opacity:1}}
@keyframes fcFadeOut{to{opacity:0;transform:scale(1.01)}}
/* 은은한 빛 — 화면 가운데로 시선을 모은다 */
#focusClock::before{content:'';position:absolute;inset:0;pointer-events:none;
    background:radial-gradient(60% 55% at 50% 45%,
        color-mix(in srgb,var(--accent) 12%,transparent) 0,transparent 70%);}
.fc-wrap{position:relative;display:flex;flex-direction:column;align-items:center;
    gap:14px;max-width:min(1100px,92vw);width:100%;text-align:center;}
/* 위쪽 모드 전환 · 오른쪽 위 닫기 — 가만히 있으면 사라진다 */
.fc-chrome{position:fixed;left:0;right:0;display:flex;align-items:center;
    justify-content:center;gap:8px;padding:14px 16px;
    transition:opacity .45s ease,transform .45s ease;z-index:3;}
.fc-chrome.top{top:0;}
.fc-chrome.bottom{bottom:0;padding-bottom:max(16px,env(safe-area-inset-bottom));flex-wrap:wrap;}
#focusClock.idle .fc-chrome{opacity:0;pointer-events:none;}
#focusClock.idle .fc-chrome.top{transform:translateY(-8px);}
#focusClock.idle .fc-chrome.bottom{transform:translateY(8px);}
#focusClock.idle{cursor:none;}
/* 11.2 · 모드 알약 바 — #focusClock 으로 스코프한다.
   같은 .fc-modes 클래스를 암기 카드 학습 방식 그리드(1937)도 쓰는데,
   스코프가 없으면 이 flex 알약 규칙이 파일 뒤에 와서 카드 그리드를 덮어써
   버튼이 컨테이너 왼쪽에 몰리는 원인이 된다. */
#focusClock .fc-modes{display:flex;gap:4px;padding:4px;border-radius:99px;
    background:color-mix(in srgb,var(--card) 94%,transparent);
    border:1px solid color-mix(in srgb,var(--border) 80%,transparent);
    box-shadow:0 6px 22px rgba(0,0,0,.12);backdrop-filter:blur(8px);}
#focusClock .fc-modes button{border:none;background:transparent;color:var(--text2);cursor:pointer;
    padding:7px 16px;border-radius:99px;font-size:12.5px;font-weight:800;
    display:flex;align-items:center;gap:6px;transition:background .18s,color .18s;}
#focusClock .fc-modes button i{font-size:15px;}
#focusClock .fc-modes button:hover{color:var(--text1);}
#focusClock .fc-modes button.on{background:var(--accent);color:#fff;
    box-shadow:0 3px 12px color-mix(in srgb,var(--accent) 40%,transparent);}
.fc-x{position:fixed;top:12px;right:14px;z-index:4;width:38px;height:38px;border-radius:12px;
    border:1px solid color-mix(in srgb,var(--border) 95%,transparent);
    background:color-mix(in srgb,var(--card) 94%,transparent);color:var(--text2);
    font-size:19px;cursor:pointer;display:flex;align-items:center;justify-content:center;
    backdrop-filter:blur(8px);transition:opacity .45s,color .18s,border-color .18s;}
.fc-x:hover{color:var(--text1);border-color:var(--text3);}
#focusClock.idle .fc-x{opacity:0;pointer-events:none;}
.fc-full{right:60px;}
/* 커다란 숫자 */
.fc-time{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;
    font-weight:300;letter-spacing:-.035em;line-height:1.0;
    font-size:clamp(62px,16.5vw,220px);color:var(--text1);
    text-shadow:0 2px 18px color-mix(in srgb,var(--bg) 85%,transparent),
                0 6px 44px color-mix(in srgb,var(--accent) 18%,transparent);
    display:block;white-space:nowrap;
    -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}
.fc-time .sec{font-size:.4em;font-weight:500;color:var(--text2);opacity:.85;
    letter-spacing:-.02em;margin-left:.14em;}
/* 23.0 · 1/100초 — 작은 숫자가 큰 숫자 아래로 내려가 붙어 보이던 문제.
   같은 baseline 에 앉히고(vertical-align), 굵기·색은 유지하되 조금 키웠다. */
.fc-time .ms{display:inline-block;vertical-align:baseline;font-size:.44em;font-weight:500;
    color:var(--accent);letter-spacing:-.01em;margin-left:.08em;min-width:1.75em;text-align:left;
    line-height:1;}
/* 23.0 · 자릿수가 길어지면(1:00:00 타이머·1:02:33.45 스톱워치) 숫자가 링·화면 밖으로
   삐져나온다. 길이에 따라 한 단씩 줄여 늘 상자 안에 들어오게 한다. */
.fc-time.len-mid{font-size:clamp(46px,11.5vw,164px);}
.fc-time.len-long{font-size:clamp(38px,9vw,128px);}
.fc-time.len-xl{font-size:clamp(32px,7.4vw,106px);}
.fc-ring .fc-time.len-mid{font-size:clamp(42px,9.6vw,108px);}
.fc-ring .fc-time.len-long{font-size:clamp(34px,7.4vw,82px);}
.fc-ring .fc-time.len-xl{font-size:clamp(28px,6.2vw,68px);}
.fc-timer-sub{display:block;text-align:center;margin-top:14px;}
.fc-done-msg{display:block;text-align:center;margin-top:10px;}
.fc-time .cl{opacity:.35;font-weight:200;animation:fcBlink 2s steps(1,end) infinite;}
@keyframes fcBlink{0%,60%{opacity:.35}61%,100%{opacity:.10}}
.fc-time.run .cl{animation:none;opacity:.35;}
.fc-sub{font-size:clamp(12.5px,1.5vw,17px);font-weight:700;color:var(--text2);
    letter-spacing:.02em;text-shadow:0 1px 10px color-mix(in srgb,var(--bg) 80%,transparent);}
.fc-label{font-size:11.5px;font-weight:900;letter-spacing:.2em;color:var(--accent);
    text-transform:uppercase;opacity:1;
    text-shadow:0 1px 10px color-mix(in srgb,var(--bg) 80%,transparent);}
/* 타이머 진행 링 */
.fc-ring{position:relative;margin:0 auto;width:min(54vh,440px);height:min(54vh,440px);
    max-width:88vw;max-height:88vw;display:flex;align-items:center;justify-content:center;}
.fc-ring svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg);}
.fc-ring circle{fill:none;stroke-linecap:round;}
.fc-ring .trk{stroke:color-mix(in srgb,var(--text3) 22%,transparent);stroke-width:4;}
.fc-ring .bar{stroke:var(--accent);stroke-width:4;
    transition:stroke-dashoffset .35s linear,stroke .3s;}
.fc-ring.warn .bar{stroke:#f59e0b;}
.fc-ring.over .bar{stroke:#ef4444;}
.fc-ring .inner{position:relative;display:flex;flex-direction:column;
    align-items:center;justify-content:center;gap:6px;padding:0 6%;}
.fc-ring .fc-time{font-size:clamp(52px,12vw,132px);}
/* 조작 버튼 */
.fc-btns{display:flex;align-items:center;gap:9px;flex-wrap:wrap;justify-content:center;}
.fc-btn{border:1px solid color-mix(in srgb,var(--border) 95%,transparent);
    background:color-mix(in srgb,var(--card) 94%,transparent);color:var(--text1);
    border-radius:14px;cursor:pointer;padding:11px 20px;font-size:13.5px;font-weight:800;
    display:flex;align-items:center;gap:7px;backdrop-filter:blur(8px);
    transition:transform .14s,border-color .18s,background .18s,color .18s;}
.fc-btn i{font-size:17px;}
.fc-btn:hover{border-color:var(--accent);color:var(--accent);}
.fc-btn:active{transform:scale(.96);}
.fc-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;
    box-shadow:0 8px 26px color-mix(in srgb,var(--accent) 38%,transparent);}
.fc-btn.primary:hover{color:#fff;filter:brightness(1.07);}
.fc-btn.ghost{background:transparent;}
.fc-btn[disabled]{opacity:.4;cursor:default;transform:none;}
/* 타이머 프리셋 */
.fc-presets{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;max-width:min(720px,92vw);}
.fc-preset{border:1px solid color-mix(in srgb,var(--border) 85%,transparent);
    background:color-mix(in srgb,var(--card) 70%,transparent);color:var(--text2);
    border-radius:99px;cursor:pointer;padding:7px 15px;font-size:12px;font-weight:800;
    backdrop-filter:blur(6px);transition:all .15s;}
.fc-preset:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-1px);}
.fc-preset.on{background:var(--accent);border-color:var(--accent);color:#fff;}
.fc-preset em{font-style:normal;opacity:.7;font-size:10px;margin-left:4px;}
.fc-custom{display:flex;align-items:center;gap:6px;}
.fc-custom input{width:58px;height:34px;text-align:center;font-size:15px;font-weight:800;
    font-variant-numeric:tabular-nums;border-radius:10px;color:var(--text1);
    border:1px solid color-mix(in srgb,var(--border) 85%,transparent);
    background:color-mix(in srgb,var(--card) 75%,transparent);outline:none;}
.fc-custom input:focus{border-color:var(--accent);}
.fc-custom span{color:var(--text3);font-size:12px;font-weight:800;}
/* 랩(구간) 기록 */
.fc-laps{width:min(430px,90vw);margin:0 auto;max-height:min(24vh,190px);overflow-y:auto;
    display:flex;flex-direction:column;gap:3px;padding:8px;border-radius:14px;
    background:color-mix(in srgb,var(--card) 88%,transparent);
    border:1px solid color-mix(in srgb,var(--border) 70%,transparent);
    backdrop-filter:blur(8px);}
.fc-laps:empty{display:none;}
.fc-lap{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:9px;
    font-size:12.5px;font-variant-numeric:tabular-nums;color:var(--text2);}
.fc-lap:nth-child(odd){background:color-mix(in srgb,var(--bg2) 55%,transparent);}
.fc-lap b{flex:none;width:34px;text-align:left;color:var(--text3);font-size:11px;}
.fc-lap .gap{flex:1;text-align:right;color:var(--text1);font-weight:800;}
.fc-lap .tot{flex:none;width:92px;text-align:right;color:var(--text3);}
.fc-lap.best .gap{color:#10b981;}
.fc-lap.worst .gap{color:#ef4444;}
/* 타이머 종료 */
#focusClock.done .fc-time{color:#ef4444;animation:fcPulse 1s ease-in-out infinite;}
@keyframes fcPulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.985)}}
.fc-done-msg{font-size:14px;font-weight:800;color:#ef4444;}
.fc-hint{display:none!important;position:fixed;bottom:8px;left:0;right:0;text-align:center;font-size:10.5px;
    color:var(--text3);opacity:.5;transition:opacity .4s;pointer-events:none;}
#focusClock.idle .fc-hint{opacity:0;}
/* 헤더 버튼의 '돌아가는 중' 점 */
.clock-btn{position:relative;}
.clock-dot{position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:50%;
    background:var(--accent);box-shadow:0 0 0 2px var(--card);animation:fcDot 1.6s ease-in-out infinite;}
@keyframes fcDot{0%,100%{opacity:1}50%{opacity:.25}}
@media(max-width:640px){
    .fc-time{font-size:clamp(52px,20vw,120px);}
    .fc-ring{width:min(52vh,340px);height:min(52vh,340px);}
    .fc-btn{padding:10px 16px;font-size:12.5px;}
    #focusClock .fc-modes button{padding:7px 12px;font-size:12px;}
    .fc-laps{max-height:22vh;}
}


/* === style block 6 === */

/* 12.6 · Apple Music 영감의 탐색형 라이브러리 */
.mp-library-tools{display:flex;gap:7px;padding:10px 10px 2px;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 8%,var(--card)),var(--card));}.mp-library-tools .mp-search{flex:1;min-width:0;font-size:1.35rem;}.mp-goto input{border:1px solid var(--border);background:var(--bg2);color:var(--text1);border-radius:8px;padding:6px;font-size:11px;font-weight:700}.mp-goto{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--text3)}.mp-goto input{width:42px;padding:4px;text-align:center}.mp-discover{padding:4px 10px 12px;background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 10%,var(--card)),var(--card) 62%);border-bottom:1px solid var(--border)}.mp-dis-head{display:flex;justify-content:space-between;align-items:baseline;padding:7px 0}.mp-dis-head b{font-size:16px;letter-spacing:-.04em}.mp-dis-head span{font-size:9px;color:var(--text3)}.mp-rec-title{font-size:11px;font-weight:800;margin:7px 0 5px;color:var(--text2)}.mp-rec-row{display:flex;gap:8px;overflow-x:auto;padding-bottom:3px;scrollbar-width:none}.mp-rec-row::-webkit-scrollbar{display:none}.mp-rec-card{border:0;background:transparent;color:var(--text1);width:78px;min-width:78px;text-align:left;cursor:pointer;padding:0}.mp-rec-card img{width:78px;height:78px;object-fit:cover;border-radius:10px;box-shadow:0 5px 14px rgba(0,0,0,.16)}.mp-rec-card span,.mp-rec-card em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mp-rec-card span{font-size:10px;font-weight:800;margin-top:4px}.mp-rec-card em{font-size:9px;color:var(--text3);font-style:normal;margin-top:1px}.mp-rec-empty{font-size:10px;color:var(--text3);padding:10px 0}.mp-lfoot{gap:7px}.mp-lfoot button{white-space:nowrap}/* 14.14 · 정렬은 큰 select 대신 작은 아이콘 버튼 하나 (크로스바·확장 공통) */
.mp-sortbtn{flex:none;width:30px;height:30px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--bg2);color:var(--text3);border-radius:9px;cursor:pointer;font-size:15px;line-height:1;transition:color .15s,border-color .15s,background .15s;margin-left:auto;}
.mp-sortbtn:hover{color:var(--text1);border-color:var(--text3);}
.mp-sortbtn.on{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 55%,var(--border));
  background:color-mix(in srgb,var(--accent) 12%,var(--bg2));}
.mp-sortbtn i{font-style:normal;display:inline-flex;align-items:center;justify-content:center;line-height:1;}
#mpBig .mpb-tabs button.mp-sortbtn{width:29px;height:26px;border:1px solid var(--border);border-radius:9px;background:var(--bg2);color:var(--text3);display:inline-flex;align-items:center;justify-content:center;padding:0;line-height:1;font-size:15px;}
#mpBig .mpb-tabs button.mp-sortbtn i{margin:0;font-size:15px;line-height:1;display:inline-flex;align-items:center;justify-content:center;}
#mpBig .mpb-tabs button.mp-sortbtn.on{background:color-mix(in srgb,var(--accent) 13%,var(--card));color:var(--accent);
  border-color:color-mix(in srgb,var(--accent) 45%,var(--border));}
/* 16.x · 가사 탭에서는 정렬 버튼이 필요 없다 (가사는 한 곡만 보여 준다) */
body.lyrmode #mpBig .mpb-tabs button.mp-sortbtn{display:none;}
@media(max-width:640px){.mp-dis-head span{display:none}.mp-rec-card{width:68px;min-width:68px}.mp-rec-card img{width:68px;height:68px}.mp-goto{display:none}.mp-sortbtn{width:28px;height:28px;font-size:14px;}}


/* === style block 7 === */

/* 13.0 · 음악 UI — 작은 컨트롤바 재생/일시정지 버튼: 파란색 배경 제거 및 고대비 텍스트 색상 */
.mp.mp-bar .mp-cover{box-shadow:0 3px 11px rgba(0,0,0,.16);border-radius:10px;}
.mp.mp-bar .mp-title{letter-spacing:-.02em;font-weight:800;}
.mp.mp-bar .mp-prog{background:color-mix(in srgb,var(--text3) 18%,var(--bg2));}
.mp.mp-bar .mp-btns button{color:color-mix(in srgb,var(--text1) 72%,var(--text3));}
.mp.mp-bar .mp-btns button:hover{background:color-mix(in srgb,var(--accent) 9%,var(--bg2));color:var(--accent);}
.mp.mp-bar .mp-btns .mp-pp{
  background:transparent !important;
  background-image:none !important;
  color:var(--text1) !important;
  box-shadow:none !important;
  border:none !important;
  font-size: 17px !important;
  width: 34px !important;
  height: 34px !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 50% !important;
  transition: color .15s, transform .1s !important;
}
.mp.mp-bar .mp-btns .mp-pp:hover{
  background:transparent !important;
  background-image:none !important;
  color:var(--accent) !important;
  filter:none !important;
  box-shadow:none !important;
}

/* 13.0 · 확대 플레이어 창 곡률(암기노트와 동일 16px) 및 유리판 스타일 */
#mpBig{
  border-radius:16px!important;
  border-color:color-mix(in srgb,var(--border) 78%,transparent)!important;
  background:color-mix(in srgb,var(--card) 91%,transparent)!important;
  box-shadow:0 28px 90px rgba(15,23,42,.28),0 5px 18px rgba(0,0,0,.12)!important;
  backdrop-filter:blur(24px) saturate(135%);
  -webkit-backdrop-filter:blur(24px) saturate(135%);
  overflow:hidden;
}

/* 13.0 · 암기 카드와 음악 창 상단 손잡이 두께·스타일·위치 100% 통일 */
.fcard-head,#mpBig .mpb-head{
  height:20px!important;
  min-height:20px!important;
  padding:3px 8px!important;
  box-sizing:border-box!important;
  gap:8px!important;
  background:var(--bg2)!important;
  border-bottom:1px solid var(--border)!important;
  cursor:grab!important;
  touch-action:none!important;
  user-select:none!important;
  -webkit-user-select:none!important;
  display:flex!important;
  align-items:center!important;
}
.fcard-head:active,#mpBig .mpb-head:active{cursor:grabbing!important;}
.fcard-head>i,#mpBig .mpb-head>i{font-size:12px!important;opacity:.7!important;color:var(--text3)!important;flex:none!important;}
.fcard-head .sp,#mpBig .mpb-head .sp{flex:1!important;display:block!important;}
.fcard-head .cards-x,#mpBig .mpb-head #mpBX,#mpBig .mpb-head button.cards-x{
  width:22px!important;
  height:19px!important;
  padding:0!important;
  border-radius:6px!important;
  font-size:14px!important;
  border:none!important;
  background:transparent!important;
  color:var(--text3)!important;
  cursor:pointer!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  flex:none!important;
}
/* 15.0 · 전체 화면 버튼 — 접기 버튼과 같은 모양 */
#mpBig .mpb-head #mpBFull{
  width:22px!important;height:19px!important;padding:0!important;
  border-radius:6px!important;font-size:13px!important;
  border:none!important;background:transparent!important;color:var(--text3)!important;
  cursor:pointer!important;display:flex!important;align-items:center!important;
  justify-content:center!important;flex:none!important;
}
#mpBig .mpb-head #mpBFull:hover{background:var(--bg)!important;color:var(--text1)!important;}
/* 15.0 → 16.0 · 전체 화면 규칙은 아래 <style id="music-fs16"> 블록으로 이전·확장됨
   (애플뮤직 풍 몰입 화면 + 진입/퇴장 모핑 애니메이션 + 이퀄라이저) */
.fcard-head .cards-x:hover,#mpBig .mpb-head #mpBX:hover{background:var(--bg)!important;color:var(--text1)!important;}

/* 동기화 버튼: 창 손잡이 안 네방향화살표 바로 옆 */
#mpBig .mpb-head #mpBRefresh{
  width:20px!important;
  height:19px!important;
  padding:0!important;
  border:none!important;
  background:transparent!important;
  color:var(--text3)!important;
  border-radius:6px!important;
  font-size:13px!important;
  cursor:pointer!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  opacity:.75!important;
  flex:none!important;
  transition:color .15s, background .15s, opacity .15s!important;
}
#mpBig .mpb-head #mpBRefresh:hover{background:var(--bg)!important;color:var(--accent)!important;opacity:1!important;}
#mpBig .mpb-head #mpBRefresh.spin i{display:inline-block;animation:mpspin .9s linear infinite;}

/* 13.0 · 확장 플레이어 페이지 숫자 직접 이동 입력 */
.mpb-pager .mpb-goto{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;color:var(--text3);font-weight:600;}
.mpb-pager .mpb-goto input{
  width:44px;
  height:22px;
  padding:2px 4px;
  text-align:center;
  border:1px solid var(--border);
  background:var(--bg2);
  color:var(--text1);
  border-radius:6px;
  font-size:11px;
  font-weight:700;
  outline:none;
  transition:border-color .15s;
}
.mpb-pager .mpb-goto input:focus{border-color:var(--accent);}
#mpBig .mpb-body{padding:14px 16px 12px;gap:12px;}
#mpBig .mpb-now{gap:18px;padding:14px;border-radius:18px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 11%,var(--card)),color-mix(in srgb,var(--card) 92%,transparent));border:1px solid color-mix(in srgb,var(--accent) 13%,var(--border));}
#mpBig .mpb-cwrap{filter:drop-shadow(0 13px 22px rgba(0,0,0,.18));}
#mpBig .mpb-cwrap .mpb-cover{border-radius:15px;}
#mpBig .mpb-meta{gap:5px;justify-content:center;}
#mpBig .mpb-title{font-size:19px;letter-spacing:-.035em;}
#mpBig .mpb-artist{font-size:13.5px;}
#mpBig .mpb-album{font-size:11px;}
#mpBig .mpb-ctl{gap:10px;margin-top:3px;}
/* 22.3 · 확대/전체 화면 재생·일시정지(#mpBPP)만 원. 하단 미니(#mpPP)는 그대로.
   안은 비우고 흰 선만 그린다. color/border 에 !important 가 없으면
   프로 테마 글자색(남색)과 border:none 이 전체화면에서 원을 지운다. */
#mpBig .mpb-ctl .pp{
  border-radius:50%!important;
  background:transparent!important;
  background-color:transparent!important;
  box-shadow:none!important;
  border:2px solid #fff!important;
  color:#fff!important;
}
#mpBig .mpb-ctl .pp:hover,#mpBig .mpb-ctl .pp:focus-visible{
  background:transparent!important;
  background-color:transparent!important;
  border-color:#fff!important;
  color:#fff!important;
}
/* 확대 창은 흰 카드라 흰 선·흰 아이콘만 두면 사라진다.
   바깥 1px 과 글자 그림자는 테두리이지, 원 안을 칠하는 것이 아니다. */
html:not(.dark) #mpBig:not(.mpb-fs):not(:fullscreen) .mpb-ctl .pp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  box-shadow:0 0 0 1px rgba(15,23,42,.42)!important;
  text-shadow:0 0 1px rgba(15,23,42,.85),0 1px 0 rgba(15,23,42,.45);
}
/* 일반 확대 플레이어: 이전·다음 넘기기는 같은 색. 전체화면은 건드리지 않는다. */
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBPrev,
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBNext{
  color:var(--text1)!important;
}
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBPrev i,
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBNext i{
  color:inherit!important;
}
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBPrev:hover,
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBNext:hover{
  color:var(--text1)!important;
  background:var(--bg2);
}
#mpBig .mpb-tabs{padding:2px 2px 0;gap:5px;}
#mpBig .mpb-tabs button{border:0;background:transparent;border-radius:9px;padding:7px 10px;font-weight:800;}
#mpBig .mpb-tabs button.on{background:color-mix(in srgb,var(--accent) 13%,var(--card));color:var(--accent);border:0;}
#mpBig .mpb-tabs button i{margin-right:4px;}
#mpBig .mpb-list{border-top:1px solid color-mix(in srgb,var(--border) 66%,transparent);padding-top:8px;}
#mpBig .mpb-li{padding:9px 10px;border-radius:10px;}
#mpBig .mpb-li.on{box-shadow:inset 3px 0 0 var(--accent);}

/* 추천 화면 */
#mpBig .mpb-list.discover-mode{display:block;overflow-x:hidden;overflow-y:auto;border-top:0;padding:0 1px 16px;}
.mpb-reco-top{display:flex;align-items:flex-start;gap:10px;padding:4px 3px 5px;}
.mpb-reco-top small{font-size:9px;color:var(--accent);font-weight:900;letter-spacing:.13em;}
.mpb-reco-top h2{font-size:22px;letter-spacing:-.06em;margin:2px 0 2px;color:var(--text1);}
.mpb-reco-top p{font-size:11px;color:var(--text3);margin:0;}
.mpb-reco-refresh{margin-left:auto;width:30px;height:30px;border:1px solid var(--border);border-radius:50%;background:var(--bg2);color:var(--text2);cursor:pointer;transition:border-color .2s,color .2s,transform .2s;}
.mpb-reco-refresh:hover{border-color:var(--accent);color:var(--accent);}
.mpb-reco-refresh:active{transform:rotate(180deg) scale(.94);}
.mpb-reco-current{display:flex;align-items:center;gap:9px;padding:7px 9px;margin:0 0 8px;border:1px solid var(--border);border-radius:12px;background:color-mix(in srgb,var(--bg2) 72%,transparent);}
.mpb-reco-current-art{width:34px;height:34px;border-radius:8px;display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--accent);color:#fff;flex:none;}
.mpb-reco-current-art img{width:100%;height:100%;object-fit:cover;}
.mpb-reco-current div:nth-child(2){display:flex;flex-direction:column;min-width:0;flex:1;}
.mpb-reco-current small{font-size:9px;color:var(--text3);}
.mpb-reco-current b,.mpb-reco-current span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-reco-current b{font-size:11.5px;color:var(--text1);}
.mpb-reco-current span{font-size:10px;color:var(--text3);}
.mpb-reco-current button{width:28px;height:28px;border:0;border-radius:50%;background:var(--accent);color:#fff;cursor:pointer;flex:none;}
.mpb-group-row{display:flex;gap:6px;overflow-x:auto;overflow-y:hidden;padding:2px 3px 10px;scrollbar-width:none;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;max-width:100%;width:100%;min-width:0;box-sizing:border-box;}
.mpb-group-row::-webkit-scrollbar,.mpb-reco-row::-webkit-scrollbar{display:none;}
.mpb-group-chip{flex:none;flex-shrink:0;display:inline-flex;align-items:center;gap:5px;white-space:nowrap;border:1px solid var(--border);background:var(--bg2);color:var(--text2);border-radius:99px;padding:6px 10px;font-size:10.5px;font-weight:800;cursor:pointer;}
.mpb-group-chip span{white-space:nowrap;}
.mpb-group-chip i{font-size:13px;color:var(--accent);}
.mpb-group-chip em{font-style:normal;font-size:9px;color:var(--text3);}
.mpb-group-chip.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--card));color:var(--accent);}
.mpb-reco-section{margin:5px 0 12px;}
/* 랜덤 믹스 히어로 — '지금 재생 중' 상자와 같은 결(테두리+연한 배경, 그라데이션 없음) */
.mpb-random-hero{display:flex;align-items:center;gap:9px;width:100%;cursor:pointer;text-align:left;
  padding:7px 9px;border:1px solid var(--border);border-radius:12px;
  background:color-mix(in srgb,var(--bg2) 72%,transparent);color:var(--text1);
  transition:border-color .12s ease,transform .12s ease;}
.mpb-random-hero:hover{border-color:var(--accent);}
.mpb-random-hero:active{transform:scale(.99);}
.mpb-random-hero .mrh-ic{flex:0 0 auto;width:34px;height:34px;border-radius:8px;display:flex;
  align-items:center;justify-content:center;font-size:17px;background:var(--accent);color:#fff;}
.mpb-random-hero .mrh-tx{flex:1;min-width:0;display:flex;flex-direction:column;}
.mpb-random-hero .mrh-tx b{font-size:11.5px;font-weight:800;color:var(--text1);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-random-hero .mrh-tx em{font-size:10px;font-style:normal;color:var(--text3);margin-top:1px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-random-hero .mrh-play{flex:0 0 auto;width:28px;height:28px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;font-size:16px;background:var(--accent);color:#fff;}
.mpb-reco-head{display:flex;align-items:baseline;gap:7px;padding:0 3px 6px;}
.mpb-reco-head b{font-size:13px;letter-spacing:-.03em;}
.mpb-reco-head span{font-size:10px;color:var(--text3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-reco-row{display:grid;grid-auto-flow:column;grid-auto-columns:112px;gap:9px;overflow-x:auto;padding:1px 3px 4px;scrollbar-width:none;}
.mpb-reco-card,.mpb-album-card{display:flex;flex-direction:column;min-width:0;text-align:left;border:0;background:transparent;padding:0;color:var(--text1);cursor:pointer;}
.mpb-reco-art,.mpb-album-art{position:relative;display:flex;align-items:center;justify-content:center;width:112px;height:112px;border-radius:13px;background:linear-gradient(135deg,var(--accent),#8e5cf7);overflow:hidden;box-shadow:0 7px 16px rgba(0,0,0,.14);}
.mpb-album-art{border-radius:10px;}
.mpb-reco-art img,.mpb-album-art img{width:100%;height:100%;object-fit:cover;}
.mpb-reco-art>i:first-child,.mpb-album-art>i:first-child{font-size:30px;color:#fff;opacity:.8;}
.mpb-reco-play{position:absolute;right:7px;bottom:7px;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.94);color:var(--accent);font-size:14px;box-shadow:0 3px 9px rgba(0,0,0,.22);opacity:0;transform:translateY(3px);transition:opacity .15s,transform .15s;}
.mpb-reco-card:hover .mpb-reco-play,.mpb-album-card:hover .mpb-reco-play{opacity:1;transform:none;}
.mpb-reco-card>b,.mpb-reco-card>em,.mpb-album-card>b,.mpb-album-card>em{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mpb-reco-card>b,.mpb-album-card>b{font-size:11px;margin-top:6px;font-weight:800;}
.mpb-reco-card>em,.mpb-album-card>em{font-size:9.5px;color:var(--text3);font-style:normal;margin-top:2px;}
.mpb-album-card>small{display:inline-flex;align-self:flex-start;margin-top:3px;padding:2px 5px;border-radius:999px;background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-size:8.5px;font-weight:900;line-height:1;}
.mpb-playlist-card .mpb-album-art{border-radius:18px;background:linear-gradient(135deg,#10b981,var(--accent));}
.mpb-reco-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--text3);padding:54px 12px;text-align:center;}
.mpb-reco-empty i{font-size:34px;color:var(--accent);opacity:.7;}
.mpb-reco-empty b{font-size:13px;color:var(--text1);}
.mpb-reco-empty span{font-size:11px;}
@media(max-width:640px){
  #mpBig .mpb-body{padding:11px 10px 9px;}
  #mpBig .mpb-now{gap:12px;padding:10px;border-radius:15px;}
  #mpBig .mpb-title{font-size:16px;}
  #mpBig .mpb-cwrap,#mpBig .mpb-vinyl,#mpBig .mpb-cwrap .mpb-cover{width:96px;height:96px;}
  .mpb-reco-top h2{font-size:20px;}
  .mpb-reco-row{grid-auto-columns:96px;}
  .mpb-reco-art,.mpb-album-art{width:96px;height:96px;}
}


/* === style block 8 === */

/* ═══════════════════════════════════════════════════════════
   16.0 · 애플뮤직 풍 전체 화면 플레이어 + 이퀄라이저
   · 전체 화면이 되면 창이 부드럽게 모핑되며 커지고(.mpb-anim),
     표지를 크게 흐린 몰입 배경 + 표지 색으로 물드는 오로라 위에
     큰 표지·컨트롤이 떠오른다.
   · 목록/추천/가사는 오른쪽(폰은 아래)에서 슬라이드되는 서랍.
   · 이퀄라이저는 작은 아이콘 뒤 팝오버 — Web Audio 10밴드.
   ═══════════════════════════════════════════════════════════ */

/* ── 열리는 동안 창→전체화면 모핑 (크기·위치·곡률 전환) ── */
#mpBig.mpb-anim{
  transition:left .52s cubic-bezier(.32,.72,0,1),
             top .52s cubic-bezier(.32,.72,0,1),
             width .52s cubic-bezier(.32,.72,0,1),
             height .52s cubic-bezier(.32,.72,0,1),
             border-radius .52s cubic-bezier(.32,.72,0,1),
             box-shadow .52s ease !important;
}

/* ── 전체 화면 기본 틀 (진짜 Fullscreen API + css 가짜 전체화면 공통) ── */
#mpBig.mpb-fs,#mpBig:fullscreen,#mpBig:-webkit-full-screen{
  left:0!important;top:0!important;right:0!important;bottom:0!important;
  width:100vw!important;height:100vh!important;height:100dvh!important;max-height:100vh!important;max-height:100dvh!important;
  border-radius:0!important;border:none!important;
  z-index:6000!important;
  background:#0a0c13!important;
  backdrop-filter:none;-webkit-backdrop-filter:none;
  box-shadow:none!important;
  cursor:default;
}
#mpBig.mpb-fs ::selection{background:rgba(255,255,255,.25);color:#fff;}

/* ── 앰비언트 배경: 표지를 크게 흐려 깔고, 표지에서 뽑은 두 색의 오로라가 천천히 흐른다 ── */
.mpb-ambient{position:absolute;inset:0;z-index:0;display:none;overflow:hidden;background:#0a0c13;}
#mpBig.mpb-fs .mpb-ambient,#mpBig:fullscreen .mpb-ambient,#mpBig:-webkit-full-screen .mpb-ambient{
  display:block;inset:-4px;animation:mpfsAmb .85s ease both;}
@keyframes mpfsAmb{from{opacity:0;transform:scale(1.07);}to{opacity:1;transform:none;}}
.mpb-ambient img{position:absolute;inset:-9%;width:118%;height:118%;object-fit:cover;
  filter:blur(64px) saturate(1.6) brightness(.78);
  opacity:0;transform:scale(1.1);transition:opacity 1s ease;}
.mpb-ambient img.on{opacity:.56;}
.mpb-blob{position:absolute;width:47vmax;height:47vmax;border-radius:50%;
  filter:blur(56px);mix-blend-mode:screen;opacity:.34;pointer-events:none;}
.mpb-blob.a{background:radial-gradient(circle at 50% 50%,var(--amb2,#8e5cf7) 0%,transparent 62%);
  top:-17vmax;right:-13vmax;animation:mpbloA 17s ease-in-out infinite alternate;}
.mpb-blob.b{background:radial-gradient(circle at 50% 50%,var(--amb1,#4f6ef7) 0%,transparent 62%);
  bottom:-19vmax;left:-13vmax;animation:mpbloB 21s ease-in-out infinite alternate;}
@keyframes mpbloA{to{transform:translate(-10vmax,7vmax) scale(1.22);}}
@keyframes mpbloB{to{transform:translate(9vmax,-7vmax) scale(1.14);}}
.mpb-ambient-veil{position:absolute;inset:0;
  background:
    radial-gradient(130% 95% at 50% 112%,rgba(4,6,10,.86) 0%,rgba(4,6,10,.26) 46%,rgba(6,8,12,0) 100%),
    linear-gradient(180deg,rgba(5,7,11,.5) 0%,rgba(5,7,11,.14) 26%,rgba(5,7,11,.2) 62%,rgba(4,6,10,.6) 100%);}

/* ── 머리말: 창 모드에서는 그대로, 전체 화면에선 투명 오버레이 + 가울 대문자 라벨 ── */
.mpb-head-title{display:none;}
#mpBig.mpb-fs .mpb-head,#mpBig:fullscreen .mpb-head{
  position:absolute!important;top:0;left:0;right:0;z-index:30;
  height:52px!important;min-height:52px!important;
  padding:10px 16px!important;box-sizing:border-box!important;
  background:linear-gradient(180deg,rgba(6,8,13,.5),rgba(6,8,13,0))!important;
  border-bottom:none!important;cursor:default!important;
}
#mpBig.mpb-fs .mpb-head>i{display:none!important;}
#mpBig.mpb-fs .mpb-head-title{
  display:inline-flex;align-items:center;gap:8px;
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  font-size:10px;font-weight:800;letter-spacing:.26em;text-indent:.26em;
  color:rgba(255,255,255,.55);pointer-events:none;white-space:nowrap;}
#mpBig.mpb-fs .mpb-head button,#mpBig:fullscreen .mpb-head button{
  width:32px!important;height:30px!important;border-radius:10px!important;
  font-size:16px!important;color:rgba(255,255,255,.8)!important;
  background:rgba(255,255,255,.09)!important;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
#mpBig.mpb-fs .mpb-head button:hover,#mpBig:fullscreen .mpb-head button:hover{
  background:rgba(255,255,255,.18)!important;color:#fff!important;}
/* 머리 위 작은 재생 막대표 (재생 중일 때만 너울너울) */
.mpb-head-eq{display:inline-flex;align-items:flex-end;gap:1.5px;height:10px;}
.mpb-head-eq i{width:2.5px;height:3.5px;border-radius:1px;background:rgba(255,255,255,.75);
  animation:mpbarX 1s ease-in-out infinite;}
.mpb-head-eq i:nth-child(2){animation-delay:.22s;}
.mpb-head-eq i:nth-child(3){animation-delay:.4s;}
@keyframes mpbarX{0%,100%{height:3.5px}50%{height:10px}}
body:not(.mpb-playing) .mpb-head-eq i{animation-play-state:paused;height:3.5px;}

/* ── 본문 레이아웃: 물대포(스테이지) + 목록 서랍 ── */
.mpb-stage{position:relative;flex:none;min-height:0;}
.mpb-drawer{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0;}
.mpb-drawer-in{display:flex;flex-direction:column;flex:1;min-height:0;gap:12px;}

#mpBig.mpb-fs .mpb-body,#mpBig:fullscreen .mpb-body{
  position:relative;z-index:2;flex-direction:row;gap:0;padding:0;overflow:hidden;}
#mpBig.mpb-fs .mpb-stage,#mpBig:fullscreen .mpb-stage{
  flex:1;min-width:0;min-height:0;display:flex;align-items:center;justify-content:center;
  padding:66px clamp(18px,5vw,64px) clamp(22px,5vh,44px);
  overflow:hidden;
  animation:mpfsStage .58s cubic-bezier(.22,.9,.3,1) both;}
@keyframes mpfsStage{from{opacity:0;transform:translateY(36px) scale(.94);}to{opacity:1;transform:none;}}

/* 전체 화면 '지금 재생 중' 카드 → 세로 정렬 큰 물대 */
#mpBig.mpb-fs .mpb-now,#mpBig:fullscreen .mpb-now{
  flex-direction:column;align-items:stretch;justify-content:center;
  gap:clamp(14px,2.6vh,26px);
  width:min(560px,94%);max-height:100%;margin:0;
  padding:0;background:none;border:none;box-shadow:none;border-radius:0;}
#mpBig.mpb-fs .mpb-cwrap,#mpBig:fullscreen .mpb-cwrap{
  width:clamp(180px,min(37vh,74vw),400px);height:clamp(180px,min(37vh,74vw),400px);
  margin:0 auto;filter:drop-shadow(0 30px 54px rgba(0,0,0,.5));
  animation:mpfsCover .64s .06s cubic-bezier(.22,.9,.28,1.08) both;}
@keyframes mpfsCover{from{opacity:0;transform:translateY(30px) scale(.72);}to{opacity:1;transform:none;}}
#mpBig.mpb-fs .mpb-cwrap .mpb-cover,#mpBig:fullscreen .mpb-cwrap .mpb-cover{
  width:100%;height:100%;border-radius:clamp(14px,2.6vh,24px);
  box-shadow:0 0 0 1px rgba(255,255,255,.12),0 26px 60px rgba(0,0,0,.5);}
#mpBig.mpb-fs .mpb-vinyl,#mpBig:fullscreen .mpb-vinyl{display:none;}
/* 재생 중이면 표지가 아주 살짝 숨쉰다 */
body.mpb-playing #mpBig.mpb-fs .mpb-cwrap .mpb-cover,
body.mpb-playing #mpBig:fullscreen .mpb-cwrap .mpb-cover{
  animation:mpfsBreath 5.6s ease-in-out infinite;}
@keyframes mpfsBreath{0%,100%{transform:scale(1)}50%{transform:scale(1.016)}}
/* 마우스 패럴 럭스 (JS 가 --tiltx/y 를 씀) */
#mpBig.mpb-fs .mpb-cwrap{transform:perspective(1100px) rotateX(var(--tilty,0deg)) rotateY(var(--tiltx,0deg));
  transition:transform .18s ease-out;}
#mpBig.mpb-fs .mpb-cwrap.bump,#mpBig:fullscreen .mpb-cwrap.bump{animation:mpfsCoverSwap .5s cubic-bezier(.22,.9,.3,1) both;}
@keyframes mpfsCoverSwap{from{opacity:.35;transform:scale(.93) translateY(8px);}to{opacity:1;transform:none;}}

/* 텍스트는 전부 하얀 계열 — 어두운 몰입 배경 위 */
#mpBig.mpb-fs .mpb-meta,#mpBig:fullscreen .mpb-meta{gap:7px;align-items:center;}
#mpBig.mpb-fs .mpb-title,#mpBig:fullscreen .mpb-title{
  font-size:clamp(20px,3.5vh,30px);text-align:center;color:#fff;line-height:1.22;
  text-shadow:0 2px 18px rgba(0,0,0,.35);max-width:100%;}
#mpBig.mpb-fs .mpb-artist,#mpBig:fullscreen .mpb-artist{
  font-size:clamp(14px,2vh,17px);text-align:center;color:rgba(255,255,255,.82);}
#mpBig.mpb-fs .mpb-album,#mpBig:fullscreen .mpb-album{
  font-size:12px;text-align:center;color:rgba(255,255,255,.5);}
#mpBig.mpb-fs .mpb-title.bump,#mpBig:fullscreen .mpb-title.bump{animation:mpbump .48s cubic-bezier(.22,.9,.3,1) both;}
@keyframes mpbump{from{opacity:0;transform:translateY(12px);}to{opacity:1;transform:none;}}
#mpBig.mpb-fs .mpb-chips,#mpBig:fullscreen .mpb-chips{justify-content:center;}
#mpBig.mpb-fs .mpb-chips span,#mpBig:fullscreen .mpb-chips span{
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.16);color:rgba(255,255,255,.82);}
#mpBig.mpb-fs .mpb-chips span.src,#mpBig:fullscreen .mpb-chips span.src{color:#9fd1ff;border-color:rgba(159,209,255,.4);}
#mpBig.mpb-fs .mpb-prog,#mpBig:fullscreen .mpb-prog,#mpBig:-webkit-full-screen .mpb-prog{
  height:6px;background:rgba(255,255,255,.24);margin:8px 2px 2px;width:100%;}
#mpBig.mpb-fs #mpBFill,#mpBig:fullscreen #mpBFill,#mpBig:-webkit-full-screen #mpBFill{background:#fff;}
#mpBig.mpb-fs #mpBKnob,#mpBig:fullscreen #mpBKnob,#mpBig:-webkit-full-screen #mpBKnob{
  background:#fff;border-color:rgba(0,0,0,.16);box-shadow:0 2px 8px rgba(0,0,0,.5);
  opacity:0;transition:opacity .15s;}
#mpBig.mpb-fs .mpb-prog:hover #mpBKnob,#mpBig:fullscreen .mpb-prog:hover #mpBKnob{opacity:1;}
#mpBig.mpb-fs .mpb-time,#mpBig:fullscreen .mpb-time{
  color:#ffffff !important;font-size:13px;font-weight:600;gap:10px;letter-spacing:.02em;
  text-shadow:0 1px 4px rgba(0,0,0,0.6);
}
#mpBig.mpb-fs .mpb-time .current,#mpBig:fullscreen .mpb-time .current{
  color:#ffffff !important;font-weight:800;
}
#mpBig.mpb-fs .mpb-time .end,#mpBig:fullscreen .mpb-time .end{
  color:rgba(255,255,255,0.92) !important;font-weight:700;
}
#mpBig.mpb-fs .mpb-time .sep,#mpBig:fullscreen .mpb-time .sep{
  color:rgba(255,255,255,0.7) !important;opacity:1 !important;
}
#mpBig.mpb-fs .mpb-ctl,#mpBig:fullscreen .mpb-ctl{gap:clamp(10px,2vw,20px);margin-top:clamp(4px,1.4vh,12px);}
#mpBig.mpb-fs .mpb-ctl button,#mpBig:fullscreen .mpb-ctl button{
  width:52px;height:52px;font-size:25px;color:rgba(255,255,255,.86);}
#mpBig.mpb-fs .mpb-ctl button:hover,#mpBig:fullscreen .mpb-ctl button:hover{
  background:rgba(255,255,255,.13);color:#fff;}
#mpBig.mpb-fs .mpb-ctl button.on,#mpBig:fullscreen .mpb-ctl button.on{
  color:var(--accent);background:rgba(255,255,255,.13);}
#mpBig.mpb-fs .mpb-ctl .pp,#mpBig:fullscreen .mpb-ctl .pp,#mpBig:-webkit-full-screen .mpb-ctl .pp{
  width:74px;height:74px;font-size:33px;
  background:transparent!important;background-color:transparent!important;color:#fff!important;
  border-radius:50%!important;
  box-shadow:none!important;border:2px solid #fff!important;}
#mpBig.mpb-fs .mpb-ctl .pp:hover,#mpBig:fullscreen .mpb-ctl .pp:hover,#mpBig:-webkit-full-screen .mpb-ctl .pp:hover{
  background:transparent!important;color:#fff!important;border-color:#fff!important;filter:none;transform:scale(1.04);}
#mpBig.mpb-fs .mpb-ctl .pp:active{transform:scale(.95);}

/* ── 보조 버튼 줄: 속도 · 이퀄라이저 · 타이머 · 볼륨 · (전체 화면)가사 · 목록 ── */
.mpb-ric{position:relative;width:28px;height:28px;padding:0;border:1px solid var(--border);
  background:var(--bg2);color:var(--text2);border-radius:8px;cursor:pointer;font-size:14px;
  display:inline-flex;align-items:center;justify-content:center;flex:none;gap:0;}
.mpb-ric:hover{color:var(--text1);border-color:var(--text3);}
.mpb-ric.on{color:var(--accent);border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,transparent);}
.mpb-ric em{position:absolute;top:-7px;right:-8px;font-style:normal;font-size:8.5px;font-weight:800;
  background:var(--accent);color:#fff;border-radius:99px;padding:1px 4.5px;line-height:1.35;display:none;}
.mpb-ric.live em{display:block;animation:mpbump .3s both;}
.mpb-fsonly{display:none!important;}
#mpBig.mpb-fs .mpb-fsonly,#mpBig:fullscreen .mpb-fsonly{display:inline-flex!important;}
/* 전체 모드: 듣기용만 남긴다 (가사 탭은 row2 버튼, 올리기·정렬·추천은 창 모드용) */
#mpBig.mpb-fs .mpb-tabs button#mpBTabY,#mpBig:fullscreen .mpb-tabs button#mpBTabY,
#mpBig.mpb-fs .mpb-winonly,#mpBig:fullscreen .mpb-winonly{display:none!important;}
#mpBig.mpb-fs .mpb-pager .mpb-goto,#mpBig:fullscreen .mpb-pager .mpb-goto{display:none;}
#mpBig.mpb-fs .mpb-row2,#mpBig:fullscreen .mpb-row2{justify-content:center;gap:12px;margin-top:clamp(2px,.8vh,8px);}
#mpBig.mpb-fs .mpb-row2 #mpBRate,#mpBig:fullscreen .mpb-row2 #mpBRate{
  height:38px;padding:0 13px;border-radius:99px;font-size:12px;
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16);color:rgba(255,255,255,.85);}
#mpBig.mpb-fs .mpb-row2 #mpBRate:hover{color:#fff;border-color:rgba(255,255,255,.4);}
#mpBig.mpb-fs .mpb-row2 #mpBRate.on{color:#000;background:#fff;border-color:#fff;}
#mpBig.mpb-fs .mpb-ric,#mpBig:fullscreen .mpb-ric{
  width:38px;height:38px;border-radius:50%;font-size:16px;
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.14);color:rgba(255,255,255,.85);}
#mpBig.mpb-fs .mpb-ric:hover,#mpBig:fullscreen .mpb-ric:hover{
  color:#fff;background:rgba(255,255,255,.17);}
#mpBig.mpb-fs .mpb-ric.on,#mpBig:fullscreen .mpb-ric.on{
  color:#fff;background:var(--accent);border-color:var(--accent);}
#mpBig.mpb-fs .mpb-vol,#mpBig:fullscreen .mpb-vol{
  flex:none;width:min(180px,22vw);color:rgba(255,255,255,.72);}
#mpBig.mpb-fs .mpb-vol input{accent-color:#fff;}
@media(max-width:560px){#mpBig.mpb-fs .mpb-vol,#mpBig:fullscreen .mpb-vol{width:104px;}}

/* ── 목록 서랍: 데스크톱은 오른쪽에서, 폰은 아래 시트로 ── */
#mpBig.mpb-fs .mpb-drawer,#mpBig:fullscreen .mpb-drawer{
  flex:none;width:0;overflow:hidden;
  transition:width .46s cubic-bezier(.32,.72,0,1);}
#mpBig.mpb-fs.show-drawer .mpb-drawer,#mpBig:fullscreen.show-drawer .mpb-drawer{
  width:min(404px,38vw);}
#mpBig.mpb-fs .mpb-drawer-in,#mpBig:fullscreen .mpb-drawer-in{
  width:min(404px,38vw);height:100%;padding:64px 18px 16px;box-sizing:border-box;gap:11px;
  background:rgba(10,13,20,.5);
  border-left:1px solid rgba(255,255,255,.09);
  backdrop-filter:blur(22px) saturate(140%);-webkit-backdrop-filter:blur(22px) saturate(140%);}
#mpBig.mpb-fs .mpb-tabs,#mpBig:fullscreen .mpb-tabs{flex-wrap:nowrap;overflow-x:auto;}
#mpBig.mpb-fs .mpb-tabs button,#mpBig:fullscreen .mpb-tabs button{
  background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.1);color:rgba(255,255,255,.78);
  white-space:nowrap;flex:none;padding:6px 8px;font-size:11px;}
#mpBig.mpb-fs .mpb-tabs button i,#mpBig:fullscreen .mpb-tabs button i{margin-right:3px;}
#mpBig.mpb-fs .mpb-li,#mpBig:fullscreen .mpb-li{flex-wrap:nowrap;}
#mpBig.mpb-fs .mpb-li span,#mpBig:fullscreen .mpb-li span,
#mpBig.mpb-fs .mpb-li em,#mpBig:fullscreen .mpb-li em{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
#mpBig.mpb-fs .mpb-tabs button:hover,#mpBig:fullscreen .mpb-tabs button:hover{color:#fff;border-color:rgba(255,255,255,.3);}
#mpBig.mpb-fs .mpb-tabs button.on,#mpBig:fullscreen .mpb-tabs button.on{background:var(--accent);color:#fff;border-color:var(--accent);}
#mpBig.mpb-fs .mpb-tabs button.mpb-icon.on,#mpBig:fullscreen .mpb-tabs button.mpb-icon.on{background:var(--accent);color:#fff;}
#mpBig.mpb-fs #mpBUp,#mpBig:fullscreen #mpBUp{
  background:rgba(255,255,255,.1)!important;color:rgba(255,255,255,.88)!important;border-color:rgba(255,255,255,.16)!important;
  width:30px;height:26px;padding:0!important;font-size:0!important;overflow:hidden;flex:none;}
#mpBig.mpb-fs #mpBUp::before,#mpBig:fullscreen #mpBUp::before{content:'＋';font-size:15px;font-weight:800;line-height:26px;}
#mpBig.mpb-fs #mpBUp:hover,#mpBig:fullscreen #mpBUp:hover{background:rgba(255,255,255,.2)!important;}
#mpBig.mpb-fs .mpb-list,#mpBig:fullscreen .mpb-list{border-top-color:rgba(255,255,255,.1);}
#mpBig.mpb-fs .mpb-li,#mpBig:fullscreen .mpb-li{color:rgba(255,255,255,.88);}
#mpBig.mpb-fs .mpb-li:hover,#mpBig:fullscreen .mpb-li:hover{background:rgba(255,255,255,.09);}
#mpBig.mpb-fs .mpb-li.on,#mpBig:fullscreen .mpb-li.on{
  background:color-mix(in srgb,var(--accent) 30%,transparent);color:#fff;box-shadow:inset 3px 0 0 var(--accent);}
#mpBig.mpb-fs .mpb-li em,#mpBig:fullscreen .mpb-li em{color:rgba(255,255,255,.45);}
#mpBig.mpb-fs .mpb-artgrp,#mpBig:fullscreen .mpb-artgrp{color:rgba(255,255,255,.72);}
#mpBig.mpb-fs .mpb-artgrp em,#mpBig:fullscreen .mpb-artgrp em{color:rgba(255,255,255,.4);}
#mpBig.mpb-fs .mpb-empty,#mpBig:fullscreen .mpb-empty{color:rgba(255,255,255,.55);}
#mpBig.mpb-fs .mpb-pager,#mpBig:fullscreen .mpb-pager{color:rgba(255,255,255,.5);}
#mpBig.mpb-fs .mpb-pager button,#mpBig:fullscreen .mpb-pager button{
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.14);color:rgba(255,255,255,.85);}
#mpBig.mpb-fs .mpb-pager .mpb-goto input,#mpBig:fullscreen .mpb-pager .mpb-goto input{
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16);color:#fff;}
#mpBig.mpb-fs .mpb-lyr .ll,#mpBig:fullscreen .mpb-lyr .ll{color:#fff;}
#mpBig.mpb-fs .mpb-lyr .ll.now,#mpBig:fullscreen .mpb-lyr .ll.now{color:var(--accent);}
/* 추천(발견) 화면 글씨도 어두운 서랍에 맞춰 밝게 */
#mpBig.mpb-fs .mpb-reco-top h2,#mpBig:fullscreen .mpb-reco-top h2{color:#fff;}
#mpBig.mpb-fs .mpb-reco-top p,#mpBig:fullscreen .mpb-reco-top p{color:rgba(255,255,255,.55);}
#mpBig.mpb-fs .mpb-reco-head b,#mpBig:fullscreen .mpb-reco-head b{color:#fff;}
#mpBig.mpb-fs .mpb-reco-head span,#mpBig:fullscreen .mpb-reco-head span{color:rgba(255,255,255,.5);}
#mpBig.mpb-fs .mpb-reco-card>b,#mpBig:fullscreen .mpb-reco-card>b{color:rgba(255,255,255,.92);}
#mpBig.mpb-fs .mpb-group-chip,#mpBig:fullscreen .mpb-group-chip{
  background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12);color:rgba(255,255,255,.8);}
#mpBig.mpb-fs .mpb-reco-current,#mpBig:fullscreen .mpb-reco-current{
  background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.12);}
#mpBig.mpb-fs .mpb-reco-current b,#mpBig:fullscreen .mpb-reco-current b{color:#fff;}
#mpBig.mpb-fs .mpb-reco-current span,#mpBig:fullscreen .mpb-reco-current span{color:rgba(255,255,255,.5);}
#mpBig.mpb-fs .mpb-reco-empty b,#mpBig:fullscreen .mpb-reco-empty b{color:#fff;}
#mpBig.mpb-fs .mp-emptybox,#mpBig:fullscreen .mp-emptybox{color:rgba(255,255,255,.75);}

/* ── 검색창 예쁘게: 둥근 필 + 포커스 글로우 + 결과 배지 ── */
.mpb-searchbar{border-radius:999px;padding:6px 11px;
  background:color-mix(in srgb,var(--bg2) 80%,transparent);
  border:1px solid color-mix(in srgb,var(--border) 85%,transparent);
  transition:border-color .18s,box-shadow .18s;}
.mpb-searchbar:focus-within{
  border-color:color-mix(in srgb,var(--accent) 55%,transparent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent);}
.mpb-searchbar.show{animation:mpfind .3s cubic-bezier(.22,.9,.3,1.18);}
@keyframes mpfind{from{opacity:0;transform:translateY(-7px) scale(.97);}to{opacity:1;transform:none;}}
.mpb-searchcnt{font-size:10px;font-weight:800;color:var(--accent);
  background:color-mix(in srgb,var(--accent) 13%,transparent);
  padding:2px 8px;border-radius:99px;flex:none;white-space:nowrap;}
.mpb-searchcnt:empty{display:none;}
#mpBig.mpb-fs .mpb-searchbar,#mpBig:fullscreen .mpb-searchbar{
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.14);}
#mpBig.mpb-fs .mpb-searchbar:focus-within,#mpBig:fullscreen .mpb-searchbar:focus-within{
  border-color:rgba(255,255,255,.5);box-shadow:0 0 0 3px rgba(255,255,255,.12);}
#mpBig.mpb-fs .mpb-searchbar input,#mpBig:fullscreen .mpb-searchbar input{color:#fff;}
#mpBig.mpb-fs .mpb-searchbar input::placeholder,#mpBig:fullscreen .mpb-searchbar input::placeholder{color:rgba(255,255,255,.4);}
#mpBig.mpb-fs .mpb-searchbar>i,#mpBig:fullscreen .mpb-searchbar>i{color:rgba(255,255,255,.5);}
#mpBig.mpb-fs .mpb-searchbar button,#mpBig:fullscreen .mpb-searchbar button{color:rgba(255,255,255,.6);}
#mpBig.mpb-fs .mpb-searchbar button:hover,#mpBig:fullscreen .mpb-searchbar button:hover{color:#fff;background:rgba(255,255,255,.1);}

/* 목록에서 지금 재생 중: 스피커 아이콘 대신 너울거리는 막대 */
.mp-eqbars{display:inline-flex;align-items:flex-end;gap:1.5px;height:11px;vertical-align:-2px;margin-right:6px;}
.mp-eqbars i{width:2.5px;height:4px;border-radius:1px;background:currentColor;flex:none;
  animation:mpbarX 1s ease-in-out infinite;}
.mp-eqbars i:nth-child(2){animation-delay:.2s;}
.mp-eqbars i:nth-child(3){animation-delay:.36s;}
body:not(.mpb-playing) .mp-eqbars i{animation-play-state:paused;height:4px;}
.mpb-li.on .mp-eqbars i{background:var(--accent);}
#mpBig.mpb-fs .mpb-li.on .mp-eqbars i,#mpBig:fullscreen .mpb-li.on .mp-eqbars i{background:#fff;}

/* ── 이퀄라이저 팝오버 ── */
.mp-eqpop{position:absolute;left:50%;bottom:12px;z-index:70;
  width:calc(100% - 8px);max-width:860px;box-sizing:border-box;
  transform:translateX(-50%) translateY(14px) scale(.95);opacity:0;pointer-events:none;
  background:color-mix(in srgb,var(--card) 88%,transparent);
  backdrop-filter:blur(22px) saturate(150%);-webkit-backdrop-filter:blur(22px) saturate(150%);
  border:1px solid color-mix(in srgb,var(--border) 78%,transparent);border-radius:17px;
  box-shadow:0 26px 70px rgba(0,0,0,.38);
  padding:12px 10px 13px;
  transition:opacity .26s ease,transform .26s cubic-bezier(.22,.9,.3,1.18);}
.mp-eqpop.show{opacity:1;pointer-events:auto;transform:translateX(-50%) translateY(0) scale(1);}
.mp-eqpop .eq-top{display:flex;align-items:center;gap:7px;margin-bottom:8px;}
.mp-eqpop .eq-top>i{font-size:15px;color:var(--accent);}
.mp-eqpop .eq-top b{font-size:13px;color:var(--text1);letter-spacing:-.01em;}
.mp-eqpop .eq-top .eq-preset-name{font-size:10.5px;font-weight:700;color:var(--accent);}
.mp-eqpop .eq-top .sp{flex:1;}
.mp-eqpop .eq-mini{border:1px solid var(--border);background:var(--bg2);color:var(--text2);
  border-radius:7px;cursor:pointer;padding:3px 9px;font-size:10.5px;font-weight:700;}
.mp-eqpop .eq-mini:hover{color:var(--text1);border-color:var(--text3);}
.eq-sw{position:relative;width:38px;height:22px;border:none;border-radius:99px;cursor:pointer;
  background:var(--bg2);border:1px solid var(--border);transition:background .2s,border-color .2s;flex:none;padding:0;}
.eq-sw span{position:absolute;top:50%;left:3px;width:15px;height:15px;border-radius:50%;
  background:var(--text3);transform:translateY(-50%);transition:left .2s cubic-bezier(.22,.9,.3,1.3),background .2s;}
.eq-sw.on{background:var(--accent);border-color:var(--accent);}
.eq-sw.on span{left:19px;background:#fff;}
.mp-eqpop canvas{display:block;width:100%;height:54px;border-radius:10px;
  background:color-mix(in srgb,var(--bg2) 72%,transparent);
  border:1px solid color-mix(in srgb,var(--border) 70%,transparent);margin-bottom:8px;}
.eq-presets{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;overflow:visible;
  padding:0 0 2px;margin-bottom:9px;}
.eq-presets button{flex:1 1 auto;min-width:max-content;border:1px solid var(--border);background:var(--bg2);color:var(--text2);
  border-radius:99px;padding:4px 8px;font-size:10.5px;font-weight:700;cursor:pointer;white-space:nowrap;text-align:center;}
.eq-presets button:hover{color:var(--text1);border-color:var(--text3);}
.eq-presets button.on{background:var(--accent);border-color:var(--accent);color:#fff;}
.eq-presets button[data-eqp="0"]{border-color:color-mix(in srgb,var(--accent) 42%,var(--border));}
.eq-presets button[data-eqp="0"].on{
  background:linear-gradient(135deg,var(--accent),#8e5cf7);border-color:transparent;color:#fff;}
.mp-eqpop.eq-auto .eq-preset-name::before{
  content:'';display:inline-block;width:6px;height:6px;margin-right:5px;border-radius:50%;
  background:var(--accent);vertical-align:1px;
  box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 50%,transparent);
  animation:eqAutoPulse 1.4s ease-out infinite;}
@keyframes eqAutoPulse{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 50%,transparent);}
  100%{box-shadow:0 0 0 7px transparent;}}
.mp-eqpop .eq-note.live{display:block;color:var(--text2);}
.eq-bands{display:flex;justify-content:space-between;gap:4px;}
.eq-band{display:flex;flex-direction:column;align-items:center;gap:3px;width:34px;flex:none;}
.eq-band b{font-size:9px;font-weight:800;color:var(--text2);height:11px;font-variant-numeric:tabular-nums;}
.eq-band input[type=range]{
  writing-mode:vertical-lr;direction:rtl;
  width:20px;height:96px;margin:0;cursor:pointer;accent-color:var(--accent);}
.eq-band em{font-style:normal;font-size:8.5px;color:var(--text3);font-variant-numeric:tabular-nums;}
.mp-eqpop .eq-note{display:none;margin-top:8px;font-size:10.5px;line-height:1.5;color:#d98b00;}
.mp-eqpop .eq-note.show{display:block;}
.mp-eqpop.off .eq-bands,.mp-eqpop.off canvas{opacity:.38;filter:saturate(.4);pointer-events:none;}
/* 전체 화면에서의 팝오버: 어두운 유리 + 컨트롤 위쪽에 띄움 */
#mpBig.mpb-fs .mp-eqpop,#mpBig:fullscreen .mp-eqpop{
  bottom:clamp(86px,13vh,150px);
  background:rgba(13,16,24,.82);border-color:rgba(255,255,255,.13);
  box-shadow:0 30px 80px rgba(0,0,0,.6);}
#mpBig.mpb-fs .mp-eqpop .eq-top b,#mpBig:fullscreen .mp-eqpop .eq-top b{color:#fff;}
#mpBig.mpb-fs .mp-eqpop .eq-band b,#mpBig:fullscreen .mp-eqpop .eq-band b{color:rgba(255,255,255,.75);}
#mpBig.mpb-fs .mp-eqpop .eq-band em,#mpBig:fullscreen .mp-eqpop .eq-band em{color:rgba(255,255,255,.45);}
#mpBig.mpb-fs .mp-eqpop .eq-mini,#mpBig:fullscreen .mp-eqpop .eq-mini{
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16);color:rgba(255,255,255,.8);}
#mpBig.mpb-fs .mp-eqpop .eq-sw:not(.on),#mpBig:fullscreen .mp-eqpop .eq-sw:not(.on){
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.22);}
#mpBig.mpb-fs .mp-eqpop .eq-presets button,#mpBig:fullscreen .mp-eqpop .eq-presets button{
  background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.13);color:rgba(255,255,255,.78);}
#mpBig.mpb-fs .mp-eqpop .eq-presets button.on,#mpBig:fullscreen .mp-eqpop .eq-presets button.on{
  background:var(--accent);border-color:var(--accent);color:#fff;}
#mpBig.mpb-fs .mp-eqpop .eq-presets button[data-eqp="0"].on,#mpBig:fullscreen .mp-eqpop .eq-presets button[data-eqp="0"].on{
  background:linear-gradient(135deg,#7b8cff,#c084fc);border-color:transparent;color:#fff;}
#mpBig.mpb-fs .mp-eqpop .eq-note.live,#mpBig:fullscreen .mp-eqpop .eq-note.live{color:rgba(255,255,255,.72);}
#mpBig.mpb-fs .mp-eqpop.eq-auto .eq-preset-name,#mpBig:fullscreen .mp-eqpop.eq-auto .eq-preset-name{color:#fff;}
#mpBig.mpb-fs .mp-eqpop canvas,#mpBig:fullscreen .mp-eqpop canvas{
  background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.1);}

/* 폰: 서랍은 아래에서 올라오는 시트 */
@media(max-width:760px){
  #mpBig.mpb-fs .mpb-stage,#mpBig:fullscreen .mpb-stage{padding:60px 18px 20px;}
  #mpBig.mpb-fs .mpb-cwrap,#mpBig:fullscreen .mpb-cwrap{
    width:min(62vw,30vh);height:min(62vw,30vh);}
  #mpBig.mpb-fs .mpb-ctl button{width:46px;height:46px;font-size:22px;}
  #mpBig.mpb-fs .mpb-ctl .pp{width:62px;height:62px;font-size:27px;}
  #mpBig.mpb-fs .mpb-drawer,#mpBig:fullscreen .mpb-drawer{
    position:absolute;left:0;right:0;bottom:0;top:auto;z-index:25;
    width:auto;height:66vh;max-height:none;
    transform:translateY(103%);transition:transform .42s cubic-bezier(.32,.72,0,1);
    border-radius:20px 20px 0 0;overflow:hidden;}
  #mpBig.mpb-fs.show-drawer .mpb-drawer,#mpBig:fullscreen.show-drawer .mpb-drawer{transform:none;}
  #mpBig.mpb-fs .mpb-drawer-in,#mpBig:fullscreen .mpb-drawer-in{
    width:100%;padding:12px 14px calc(12px + env(safe-area-inset-bottom,0px));
    border-left:none;border-top:1px solid rgba(255,255,255,.1);
    background:rgba(10,13,20,.88);}
  /* 시트 열리면 손잡이 표시 */
  #mpBig.mpb-fs .mpb-drawer::before,#mpBig:fullscreen .mpb-drawer::before{
    content:'';position:absolute;top:7px;left:50%;transform:translateX(-50%);
    width:38px;height:4px;border-radius:99px;background:rgba(255,255,255,.28);z-index:2;}
  #mpBig.mpb-fs .mpb-tabs{margin-top:8px;}
  .mp-eqpop{bottom:10px;}
  #mpBig.mpb-fs .mp-eqpop,#mpBig:fullscreen .mp-eqpop{bottom:10px;}
}

@media (prefers-reduced-motion:reduce){
  #mpBig.mpb-anim{transition-duration:.01ms!important;}
  .mp-eqpop.eq-auto .eq-preset-name::before{animation:none!important;}
  #mpBig.mpb-fs .mpb-stage,#mpBig.mpb-fs .mpb-cwrap,#mpBig .mpb-ambient,
  .mpb-searchbar.show{animation-duration:.01ms!important;animation-delay:0ms!important;}
  .mpb-blob.a,.mpb-blob.b,body.mpb-playing #mpBig.mpb-fs .mpb-cwrap .mpb-cover{animation:none!important;}
}


/* === style block 9 === */

/* ── 진입 버블 (음악 칩 위) ── */
#ypReopen{position:fixed;right:14px;bottom:max(66px,calc(env(safe-area-inset-bottom) + 52px));
    z-index:1500;width:42px;height:42px;border-radius:50%;border:none;color:#fff;
    background:linear-gradient(135deg,#5865f2,#8b5cf6);
    box-shadow:0 6px 18px rgba(0,0,0,.32);cursor:pointer;display:flex;
    align-items:center;justify-content:center;transition:transform .18s ease,box-shadow .18s ease;}
#ypReopen:hover{transform:scale(1.06);box-shadow:0 8px 22px rgba(88,101,242,.5);}
#ypReopen svg{width:21px;height:21px;display:block;transform:rotate(15deg);}
#ypReopen.shake{animation:ypShake .4s ease;}
@keyframes ypShake{0%,100%{transform:rotate(0) translateX(0)}20%{transform:rotate(-8deg) translateX(-2px)}40%{transform:rotate(7deg) translateX(2px)}60%{transform:rotate(-5deg)}80%{transform:rotate(4deg)}}
/* 접힌 아이콘 배지 — 초록 글로우(음성참가자 수)만 남긴다 */
#ypReopen .yp-badge{position:absolute;top:-5px;right:-5px;min-width:18px;height:18px;border-radius:999px;
    color:#fff;font-size:10.5px;font-weight:800;display:none;align-items:center;justify-content:center;
    padding:0 5px;box-shadow:0 0 0 2px var(--card);line-height:1;}
#ypReopen .yp-badge.yp-voice{top:auto;bottom:-5px;right:-5px;background:#22c55e;color:#052e16;font-size:9.5px;gap:2px;
    box-shadow:0 0 0 2px var(--card),0 0 10px rgba(34,197,94,.85);}
/* 14.9 · 사이트 로딩이 끝나기 전에는 칩을 보여주지 않는다 (로딩 후 등장) */
body.sdy-booting #ypReopen,
body.sdy-booting #mpReopen{display:none !important;}

/* 음악 칩에도 엽스코드와 같은 호버 글로우 */
#mpReopen{transition:transform .18s ease,box-shadow .18s ease;}
#mpReopen:hover{transform:scale(1.06);box-shadow:0 8px 22px rgba(79,110,247,.5);}

/* ── 패널 (다크) ── */
#ypApp{position:fixed;right:14px;bottom:74px;z-index:1510;display:none;flex-direction:column;
    width:min(370px,94vw);height:min(580px,80vh);
    background:#0f1115;border:1px solid #262b36;border-radius:16px;
    box-shadow:0 22px 70px rgba(0,0,0,.55);overflow:hidden;
    font-family:inherit;}
#ypApp.open{display:flex;animation:ypIn .3s cubic-bezier(.22,.9,.3,1.12);}
/* 15.14.1 · 닫히는 중(투명해진 창)은 클릭을 먹지 않는다 — 마무리가 늦어져 '.closing' 이
   남아도 안 보이는 창이 그 자리의 칩·버튼을 가로채지 못하게 한다 */
#ypApp.closing{animation:ypOut .24s cubic-bezier(.5,0,.8,.4) forwards;pointer-events:none;}
@keyframes ypIn{from{opacity:0;transform:translateY(28px) scale(.95);}to{opacity:1;transform:none;}}
@keyframes ypOut{to{opacity:0;transform:translateY(24px) scale(.95);}}
.yp-head{display:flex;align-items:center;gap:7px;padding:3px 8px;flex:none;
    background:#171a21;border-bottom:1px solid #262b36;
    cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;min-height:20px;}
.yp-head:active{cursor:grabbing;}
.yp-head .sp{flex:1;}
.yp-head .yp-ttl{font-size:13px;font-weight:800;color:#f1f3f7;display:flex;align-items:center;gap:7px;letter-spacing:.2px;}
.yp-head .yp-ttl svg{width:15px;height:15px;color:#ff7a45;transform:rotate(15deg);}
.yp-head button{width:22px;height:19px;border:none;background:transparent;color:#8b93a5;
    border-radius:6px;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center;padding:0;
    transition:background .15s ease,color .15s ease;}
.yp-head button:hover{background:#262b36;color:#f1f3f7;}

/* ── 음성 바 (14.14 · 유리: 아래 채팅이 비쳐 보인다) ── */
.yp-voice{flex:none;padding:7px 9px;border-bottom:1px solid rgba(38,43,54,.6);
    background:rgba(19,22,28,.44);
    backdrop-filter:blur(14px) saturate(150%);-webkit-backdrop-filter:blur(14px) saturate(150%);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 6px 18px rgba(0,0,0,.28);
    display:flex;align-items:center;gap:6px;flex-wrap:wrap;
    position:relative;z-index:6;}
/* 채팅이 유리 바 '밑으로' 흘러 지나가도록 본문을 바 아래까지 끌어 올린다.
   바 높이는 참가자 칩이 늘어 줄바꿈돼도 맞도록 JS가 실제 값을 재서 넣는다
   (--ypv-neg = -높이, --ypv-pad = 높이+12). calc 없이 값만 갈아끼워 호환성을 지킨다. */
#ypApp .yp-body{margin-top:var(--ypv-neg,-40px);padding-top:var(--ypv-pad,52px);}
/* 배경음악 패널이 열리면(바가 하나 더 생기면) 겹침을 풀어 준다 */
#ypApp.yp-has-bgm .yp-body{margin-top:0;padding-top:12px;}
/* 음성참가 중이면 '버튼을 제외한' 빈 배경에만 보라 네온 그라데이션을 입힌다 */
.yp-voice.invoice{
    background:linear-gradient(90deg,rgba(124,58,237,.34),rgba(192,38,211,.34),rgba(124,58,237,.34)),rgba(19,22,28,.34);
    background-size:200% 100%;
    animation:ypNeonBg 3.4s linear infinite;}
@keyframes ypNeonBg{from{background-position:0% 0}to{background-position:200% 0}}
.ypv-join{position:relative;width:30px;height:30px;border-radius:50%;padding:0;border:none;cursor:pointer;
    color:#fff;background:linear-gradient(135deg,#5865f2,#8b5cf6);
    display:inline-flex;align-items:center;justify-content:center;font-size:15px;
    transition:filter .15s ease,transform .15s ease;}
.ypv-join:hover{filter:brightness(1.12);}
.ypv-join.off{background:#262b36;color:#c6cdd9;}
.ypv-join.loading{background:#343a48;color:#c4b5fd;cursor:progress;}
.ypv-join.loading>i{display:inline-block;animation:spin .75s linear infinite;}
.ypv-cnt{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;
    background:#22c55e;color:#052e16;font-size:9.5px;font-weight:800;display:none;align-items:center;
    justify-content:center;box-shadow:0 0 0 2px #13161c,0 0 8px rgba(34,197,94,.7);line-height:1;}
.ypv-mute{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
    border-radius:50%;border:1px solid #343a48;background:#1d222c;color:#c6cdd9;cursor:pointer;font-size:13px;
    transition:all .15s ease;}
.ypv-mute.on{background:#ef4444;color:#fff;border-color:#ef4444;}
.ypv-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;flex:none;
    border:1px solid #343a48;background:#1d222c;color:#c6cdd9;border-radius:50%;cursor:pointer;font-size:14px;
    transition:all .15s ease;}
.ypv-icon:hover{color:#fff;border-color:#4a5266;transform:translateY(-1px);}
.ypv-icon.on{color:#fff;background:linear-gradient(135deg,#7c3aed,#c026d3);border-color:transparent;
    box-shadow:0 0 10px rgba(147,51,234,.45);}
.yp-vchips{display:flex;gap:5px;flex-wrap:wrap;flex:1;min-width:0;justify-content:flex-end;}
.yp-vchip{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;padding:3px 9px;border-radius:999px;
    background:#1d222c;border:1px solid #2c3342;color:#9aa3b2;max-width:150px;transition:border-color .15s ease;}
.yp-vchip .dot{width:8px;height:8px;border-radius:50%;flex:none;}
.yp-vchip.spk .dot{background:#10b981;box-shadow:0 0 0 3px #10b98133;animation:ypPulse 1.1s infinite;}
@keyframes ypPulse{0%,100%{box-shadow:0 0 0 2px #10b98122}50%{box-shadow:0 0 0 5px #10b98155}}
.yp-vchip .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#e7eaf0;}
.yp-vchip .st{font-size:9px;color:#6b7484;}
.yp-vchip .st.ok{color:#22c55e;}
.ypv-gear{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;flex:none;
    border:1px solid #343a48;background:#1d222c;color:#c6cdd9;border-radius:50%;cursor:pointer;font-size:14px;
    transition:all .15s ease;}
.ypv-gear:hover{color:#fff;border-color:#4a5266;transform:rotate(30deg);}

/* ── 배경음악 바 (음성참가 · 같이 듣기 · 반투명 글라스) ── */
.yp-bgm{flex:none;padding:5px 8px;border-bottom:1px solid rgba(38,43,54,.55);
    background:rgba(19,22,28,.42);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);
    display:flex;align-items:center;gap:6px;position:relative;animation:ypBgmIn .25s ease;}
@keyframes ypBgmIn{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:none;}}
.yp-bgm-meta{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.2;}
.yp-bgm-meta b{font-size:11px;color:#e7eaf0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.yp-bgm-meta span{font-size:9.5px;color:#9aa3b2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.yp-bgm input[type=text]{width:118px;flex:none;background:rgba(26,30,39,.78);border:1px solid #2c3342;color:#e7eaf0;
    border-radius:8px;padding:4px 8px;font-size:11px !important;outline:none;}
.yp-bgm input[type=text]:focus{border-color:#8b5cf6;}
.yp-bgm input[type=text]::placeholder{color:#6b7484;}
.yp-bgm input[type=range]{flex:none;width:60px;accent-color:#8b5cf6;}
.yp-bgm-res{position:absolute;left:6px;right:6px;top:calc(100% + 3px);background:rgba(23,26,33,.97);
    border:1px solid #262b36;border-radius:10px;max-height:150px;overflow:auto;z-index:22;display:none;
    box-shadow:0 12px 34px rgba(0,0,0,.5);}
.yp-bgm-res button{display:flex;align-items:center;gap:6px;width:100%;border:none;background:transparent;
    color:#e7eaf0;padding:7px 9px;cursor:pointer;font-size:12px;text-align:left;}
.yp-bgm-res button:hover{background:#262b36;}
.yp-bgm-res button b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;}
.yp-bgm-res button em{color:#6b7484;font-style:normal;font-size:10px;flex:none;}
.yp-bgm-empty{padding:10px;text-align:center;color:#6b7484;font-size:11px;}

/* ── 본문 ── */
.yp-body{flex:1;overflow-y:auto;padding:12px 10px 8px;display:flex;flex-direction:column;gap:4px;
    background:radial-gradient(120% 90% at 50% 0%,#141821 0%,#0f1115 55%);}
.yp-body::-webkit-scrollbar{width:8px;}
.yp-body::-webkit-scrollbar-thumb{background:#2a3040;border-radius:8px;}
.yp-line{display:flex;gap:8px;align-items:flex-end;margin-top:10px;}
.yp-line.me{flex-direction:row-reverse;}
.yp-ava{width:30px;height:30px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
    color:#1f2937;font-size:11px;font-weight:800;box-shadow:0 2px 6px rgba(0,0,0,.35);}
.yp-stack{display:flex;flex-direction:column;gap:3px;max-width:80%;min-width:0;}
.yp-line.me .yp-stack{align-items:flex-end;}
.yp-who{font-size:11px;color:#9aa3b2;padding:0 3px;font-weight:700;}
.yp-line.me .yp-who{display:none;}
.yp-bub{background:#1c212b;border:1px solid #2a3140;border-radius:14px;padding:7px 11px;
    font-size:13.5px;line-height:1.5;color:#e7eaf0;word-break:break-word;white-space:pre-wrap;}
.yp-line.me .yp-bub{background:linear-gradient(135deg,#5865f2,#8b5cf6);border-color:transparent;color:#fff;
    box-shadow:0 3px 14px rgba(88,101,242,.28);}
.yp-bwrap{position:relative;max-width:100%;}
.yp-del{position:absolute;left:-24px;top:50%;transform:translateY(-50%);width:20px;height:20px;border:none;
    border-radius:50%;background:#2a3140;color:#9aa3b2;cursor:pointer;display:flex;align-items:center;
    justify-content:center;opacity:0;transition:opacity .15s ease,background .15s ease,color .15s ease;}
.yp-bwrap:hover .yp-del{opacity:1;}
.yp-del:hover{background:#ef4444;color:#fff;}
@media(hover:none){.yp-del{opacity:.45;}}
.yp-img{max-width:220px;max-height:220px;border-radius:12px;display:block;cursor:zoom-in;
    border:1px solid #2c3342;object-fit:cover;}
.yp-file{display:flex;align-items:center;gap:9px;background:#1c212b;border:1px solid #2a3140;
    border-radius:12px;padding:9px 11px;text-decoration:none;color:#e7eaf0;min-width:180px;max-width:240px;
    transition:border-color .15s ease,background .15s ease;}
.yp-file:hover{border-color:#5865f2;background:#232837;}
.yp-file .fi{width:32px;height:32px;border-radius:9px;background:#13161c;display:flex;align-items:center;
    justify-content:center;color:#8b5cf6;font-size:16px;flex:none;}
.yp-file .fm{min-width:0;flex:1;}
.yp-file .fn{font-size:12px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.yp-file .fs{font-size:10.5px;color:#6b7484;}
.yp-time{font-size:10px;color:#6b7484;padding:0 3px;}
.yp-reacts{display:flex;gap:4px;flex-wrap:wrap;padding:1px 2px;}
.yp-reacts button{font-size:11.5px;border:1px solid #2c3342;background:#1d222c;border-radius:999px;
    cursor:pointer;padding:2px 7px;display:inline-flex;gap:3px;align-items:center;line-height:1.2;color:#c6cdd9;
    transition:all .15s ease;}
.yp-reacts button:hover{border-color:#5865f2;transform:translateY(-1px);}
.yp-reacts button.on{border-color:#5865f2;background:#5865f2;color:#fff;}
.yp-reacts button .cnt{font-size:9.5px;opacity:.9;font-weight:800;}
.yp-sys{align-self:center;font-size:10.5px;color:#8b93a5;background:#1a1e27;
    border:1px solid #262b36;border-radius:999px;padding:3px 12px;max-width:92%;text-align:center;margin-top:10px;}
.yp-empty{align-self:center;text-align:center;color:#6b7484;font-size:12px;margin:auto;line-height:1.8;}
.yp-empty b{color:#c6cdd9;}
.yp-empty .yp-egg{font-size:40px;display:block;margin-bottom:8px;}
/* 17.4 · 환영 그림 — 고추 이모지 대신 떡볶이 SVG (assets/tteokbokki.svg) */
.yp-empty svg.yp-egg{width:74px;height:auto;margin:0 auto 10px;filter:drop-shadow(0 10px 22px rgba(0,0,0,.35));}

/* ── 애니메이션: 받은 말 = 왼쪽에서 휘익, 보낸 말 = 입력창에서 위로 휙 ── */
.yp-line.anim .yp-bub,.yp-line.anim .yp-img,.yp-line.anim .yp-file{animation:ypInA .3s cubic-bezier(.18,.89,.32,1.28);}
.yp-line.me.anim .yp-bub,.yp-line.me.anim .yp-img,.yp-line.me.anim .yp-file{animation:ypOutA .3s cubic-bezier(.18,.89,.32,1.28);}
@keyframes ypInA{from{opacity:0;transform:translateX(-30px) scale(.96);}to{opacity:1;transform:none;}}
@keyframes ypOutA{from{opacity:0;transform:translateY(30px) scale(.96);}to{opacity:1;transform:none;}}

/* ── 하단 입력 (보내기 버튼 두께에 맞춘 원래 비율) ── */
.yp-foot{flex:none;border-top:1px solid #262b36;background:#171a21;padding:7px 8px;position:relative;}
.yp-input{display:flex;align-items:center;gap:6px;}
.yp-tools{display:flex;gap:1px;}
.yp-tools button{width:32px;height:32px;border:none;background:transparent;color:#8b93a5;
    border-radius:8px;cursor:pointer;font-size:18px;display:flex;align-items:center;justify-content:center;
    transition:all .15s ease;}
.yp-tools button:hover{background:#262b36;color:#8b5cf6;transform:translateY(-1px);}
.yp-compose-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;}
.yp-draft-stickers{display:flex;flex-wrap:wrap;gap:5px;padding:4px 6px 1px;}
.yp-draft-chip{position:relative;width:46px;height:46px;border:1px solid #303748;background:#202633;border-radius:13px;
    display:flex;align-items:center;justify-content:center;padding:4px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04);}
.yp-draft-chip .yp-stk{width:36px;}
.yp-draft-chip button{position:absolute;right:-5px;top:-5px;width:17px;height:17px;border:none;border-radius:50%;
    background:#11151d;color:#b8c0cf;font-size:12px;line-height:17px;display:flex;align-items:center;justify-content:center;cursor:pointer;
    box-shadow:0 2px 8px rgba(0,0,0,.35);}
.yp-draft-chip button:hover{background:#ef4444;color:#fff;}
.yp-input textarea{width:100%;resize:none;border:1px solid #262b36;background:#1a1e27;
    color:#e7eaf0;border-radius:10px;padding:6px 10px;font-size:13px !important;max-height:80px;line-height:1.4;
    font-family:inherit;outline:none;min-height:32px;transition:border-color .15s ease;}
.yp-input textarea:focus{border-color:#5865f2;}
.yp-input textarea::placeholder{color:#6b7484;}
.yp-send{width:34px;height:34px;flex:none;border:none;border-radius:10px;cursor:pointer;
    background:linear-gradient(135deg,#5865f2,#8b5cf6);color:#fff;font-size:17px;
    display:flex;align-items:center;justify-content:center;transition:transform .15s ease,filter .15s ease;}
.yp-send:hover{filter:brightness(1.1);transform:scale(1.05);}

/* ── 이모지(해돌이 임티)/반응/설정 팝 ── */
.yp-emoji{position:absolute;bottom:48px;left:10px;display:none;grid-template-columns:repeat(4,1fr);gap:4px;
    background:#171a21;border:1px solid #262b36;border-radius:12px;padding:7px;
    box-shadow:0 12px 40px rgba(0,0,0,.5);z-index:12;}
.yp-emoji.open{display:grid;animation:ypPop .18s cubic-bezier(.22,.9,.3,1.2);}
.yp-emoji button{border:none;background:transparent;border-radius:10px;cursor:pointer;font-size:0;
    width:56px;height:56px;display:flex;align-items:center;justify-content:center;padding:5px;
    transition:transform .1s ease,background .12s ease;}
.yp-emoji button:hover{background:#262b36;transform:scale(1.12);}
.yp-react-row{position:absolute;display:none;gap:2px;background:#171a21;border:1px solid #262b36;
    border-radius:999px;padding:4px 7px;box-shadow:0 8px 26px rgba(0,0,0,.45);z-index:12;}
.yp-react-row.open{display:flex;animation:ypPop .16s cubic-bezier(.22,.9,.3,1.2);}
@keyframes ypPop{from{opacity:0;transform:scale(.85);}to{opacity:1;transform:scale(1);}}
.yp-react-row button{border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:0;
    width:32px;height:32px;display:flex;align-items:center;justify-content:center;transition:transform .12s ease;}
.yp-react-row button:hover{transform:scale(1.25);}
.yp-react-row .yp-stk{width:22px;height:22px;}

.yp-settings{position:absolute;top:46px;right:10px;width:min(250px,86%);display:none;flex-direction:column;gap:2px;
    background:#171a21;border:1px solid #262b36;border-radius:12px;padding:8px;
    box-shadow:0 14px 44px rgba(0,0,0,.55);z-index:14;}
.yp-settings.open{display:flex;animation:ypPop .18s cubic-bezier(.22,.9,.3,1.2);}
.yp-set-title{font-size:10px;color:#6b7484;font-weight:800;letter-spacing:.6px;padding:4px 4px 2px;text-transform:uppercase;}
.yp-set-row{display:flex;align-items:center;gap:8px;padding:6px 4px;border-radius:8px;}
.yp-set-row:hover{background:#1d222c;}
.yp-set-row label{flex:1;min-width:0;font-size:12px;color:#e7eaf0;font-weight:600;}
.yp-set-row .sub{font-size:9.5px;color:#6b7484;font-weight:400;display:block;}
.yp-set-row input[type=text]{flex:1;background:#1a1e27;border:1px solid #262b36;color:#e7eaf0;
    border-radius:7px;padding:5px 8px;font-size:12px !important;outline:none;min-width:0;}
.yp-set-row input[type=text]:focus{border-color:#5865f2;}
.yp-switch{width:34px;height:19px;border-radius:999px;background:#2a3040;border:1px solid #343a48;
    cursor:pointer;flex:none;position:relative;transition:background .18s ease;}
.yp-switch i{position:absolute;top:2px;left:2px;width:13px;height:13px;border-radius:50%;background:#8b93a5;
    transition:left .18s ease,background .18s ease;}
.yp-switch.on{background:#5865f2;border-color:#5865f2;}
.yp-switch.on i{left:17px;background:#fff;}
.yp-set-btn{border:none;background:#262b36;color:#e7eaf0;border-radius:7px;cursor:pointer;font-size:11px;
    font-weight:700;padding:0;width:26px;height:26px;flex:none;display:inline-flex;align-items:center;
    justify-content:center;transition:background .15s ease;}
.yp-set-btn:hover{background:#343a48;}
.yp-set-btn.spin svg{animation:ypSpin .55s cubic-bezier(.4,.1,.3,1);}
@keyframes ypSpin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
/* 14.14 · #ypApp / #ypReopen 의 폰 위치는 문서 끝 v1414-phone 에서만 정한다
   (음악바 유무에 따라 칩이 겹치지 않게 쌓아야 하므로 한 곳에서 계산한다). */

/* ── 음악바(크로스바) 열고 닫힘 애니메이션 (엽스코드와 통일) ── */
#musicPlayer.mp-bar.yp-mp-open{animation:ypMpIn .28s cubic-bezier(.22,.9,.3,1.12);}
#musicPlayer.mp-bar.yp-mp-out{animation:ypMpOut .25s cubic-bezier(.5,0,.8,.4) forwards;}
@keyframes ypMpIn{from{opacity:0;transform:translate(-50%,22px) scale(.97);}to{opacity:1;transform:translate(-50%,0) scale(1);}}
@keyframes ypMpOut{to{opacity:0;transform:translate(-50%,20px) scale(.97);}}


/* === style block 10 === */
/* 14.14의 폰 규칙은 CSS 분리 과정에서 남은 <style> 태그 때문에 파싱되지
   않았다. 모바일 규칙은 파일 끝의 `17.0 mobile` 블록 한 곳에서 관리한다. */


/* === style block 11 === */

/* ═══════════════════════════════════════════════════════════════════
   15.1 · 통합 유리 디자인 (Glass UI)
   음악 전체화면(애플뮤직 풍 몰입 화면)의 유리 질감을 사이트 전체로
   통일한다: 오로라 배경 + 반투명 유리 패널 + backdrop-blur +
   밝은 테두리 + 깊은 부드러운 그림자.
   이 블록은 문서 맨 마지막에 실려 같은 특이도의 이전 규칙을 덮어쓴다.
   건드리지 않는 것:
     · 음악 전체화면 .mpb-fs 규칙 (이미 유리의 기준)
     · #cardsModal 의 backdrop-filter:none !important (성능 예외 유지)
   ═══════════════════════════════════════════════════════════════════ */

/* 홈 스택 레이아웃은 문서 마지막의 #home-stack-layout 블록에서 관리한다. */

/* ── ① 유리 토큰 ─────────────────────────────────────────────── */
:root{
    --g-blur:14px;
    --g-blur-lg:22px;
    --g-fill:rgba(255,255,255,.58);          /* 카드 등 기본 유리 */
    --g-fill-strong:rgba(255,255,255,.74);    /* 헤더·모달 등 읽기 중요한 유리 */
    --g-in:rgba(255,255,255,.55);            /* 유리 안쪽 컨트롤 채움(스콥 --bg2) */
    --g-brd:rgba(255,255,255,.62);           /* 유리 테두리(밝은 결) */
    --g-line:rgba(15,23,42,.09);             /* 구조 헤어라인 */
    --g-hi:inset 0 1px 0 rgba(255,255,255,.55);
    --g-shadow:0 1px 2px rgba(15,23,42,.05),0 14px 34px -14px rgba(15,23,42,.25);
    --g-shadow-lg:0 2px 8px rgba(15,23,42,.07),0 30px 70px -24px rgba(15,23,42,.42);
}
.dark{
    --g-fill:rgba(22,25,34,.55);
    --g-fill-strong:rgba(25,28,39,.76);
    --g-in:rgba(255,255,255,.07);
    --g-brd:rgba(255,255,255,.10);
    --g-line:rgba(255,255,255,.08);
    --g-hi:inset 0 1px 0 rgba(255,255,255,.07);
    --g-shadow:0 1px 2px rgba(0,0,0,.30),0 14px 34px -14px rgba(0,0,0,.55);
    --g-shadow-lg:0 2px 8px rgba(0,0,0,.35),0 30px 70px -24px rgba(0,0,0,.68);
}

/* ── ② 오로라 배경 (음악 전체화면 .mpb-ambient 와 같은 팔레트) ── */
#sdyAmbient{
    position:fixed;inset:0;z-index:-2;pointer-events:none;overflow:hidden;
    background:
        radial-gradient(120% 90% at 50% 0%,#f5f7ff 0%,#f4f1fc 46%,#edf3f9 100%);
    transition:opacity .6s ease;
}
#sdyAmbient::before{ /* 위쪽에서 내려오는 부드러운 빛 */
    content:'';position:absolute;inset:0;
    background:radial-gradient(62% 42% at 50% -6%,rgba(255,255,255,.85),transparent 70%);
}
#sdyAmbient .ga{position:absolute;border-radius:50%;filter:blur(72px);will-change:transform;}
#sdyAmbient .ga.a{
    width:58vmax;height:58vmax;left:-17vmax;top:-21vmax;
    background:radial-gradient(circle at 50% 50%,rgba(79,110,247,.32) 0%,transparent 62%);
    animation:gAmbA 26s ease-in-out infinite alternate;
}
#sdyAmbient .ga.b{
    width:52vmax;height:52vmax;right:-16vmax;top:-8vmax;
    background:radial-gradient(circle at 50% 50%,rgba(142,92,247,.27) 0%,transparent 62%);
    animation:gAmbB 31s ease-in-out infinite alternate;
}
#sdyAmbient .ga.c{
    width:56vmax;height:56vmax;left:12vmax;bottom:-26vmax;
    background:radial-gradient(circle at 50% 50%,rgba(224,97,155,.20) 0%,transparent 62%);
    animation:gAmbC 36s ease-in-out infinite alternate;
}
@keyframes gAmbA{to{transform:translate(9vmax,7vmax) scale(1.16);}}
@keyframes gAmbB{to{transform:translate(-8vmax,9vmax) scale(1.12);}}
@keyframes gAmbC{to{transform:translate(7vmax,-8vmax) scale(1.18);}}
/* 다크: 음악 전체화면(#0a0c13 + 오로라)과 같은 톤 */
.dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *)){
    background:
        radial-gradient(120% 90% at 50% 0%,#0b0d16 0%,#0c0a15 48%,#090e15 100%);
}
.dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *))::before{
    background:radial-gradient(62% 42% at 50% -6%,rgba(120,140,255,.10),transparent 70%);
}
.dark #sdyAmbient .ga:not(:where(.sdy-editor-light,.sdy-editor-light *)){mix-blend-mode:screen;}
.dark #sdyAmbient .ga.a:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:radial-gradient(circle at 50% 50%,rgba(79,110,247,.34) 0%,transparent 62%);}
.dark #sdyAmbient .ga.b:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:radial-gradient(circle at 50% 50%,rgba(142,92,247,.30) 0%,transparent 62%);}
.dark #sdyAmbient .ga.c:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:radial-gradient(circle at 50% 50%,rgba(224,97,155,.22) 0%,transparent 62%);}
/* 배경화면이 있으면 사진이 주인공 — 오로라는 조용히 물러난다 */
body.has-wall #sdyAmbient{opacity:0;}
@media (prefers-reduced-motion:reduce){
    #sdyAmbient .ga{animation:none;}
}

/* ── ③ 상단 헤더 ─────────────────────────────────────────────── */
.header{
    --bg2:var(--g-in);
    /* 14.80.1 · 워드마크 주변을 로고 여백 하양과 같은 단면으로 — 이음새 없음 */
    background:var(--logo-paper);
    border-bottom:1px solid var(--g-line);
    box-shadow:0 6px 24px -18px rgba(15,23,42,.18);
}
.header #searchInput{
    border-radius:10px !important;   /* 테두리 색은 인라인(포커스 시 강조색)이 계속 담당 */
}

/* ── ④ 홈 그리드 카드 · 폴더 ─────────────────────────────────── */
.note-card,.folder-card{
    --bg2:var(--g-in);
    background:var(--g-fill);
    backdrop-filter:blur(var(--g-blur)) saturate(140%);
    -webkit-backdrop-filter:blur(var(--g-blur)) saturate(140%);
    border:1px solid var(--g-brd);
    border-radius:18px;
    box-shadow:var(--g-hi),var(--g-shadow);
}
.dark .note-card:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark .folder-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:var(--g-brd);}
.note-card:hover,.folder-card:hover{
    transform:translateY(-6px) scale(1.012);
    border-color:color-mix(in srgb,var(--accent) 45%,var(--g-brd));
    box-shadow:var(--g-hi),var(--g-shadow-lg),
               0 0 0 1px color-mix(in srgb,var(--accent) 22%,transparent);
}
.note-card.selected{border:2px solid var(--accent);box-shadow:0 0 0 3px var(--accent),0 0 0 6px rgba(79,110,247,.24);}
.note-preview{background:transparent;}
.note-card-name{
    background:color-mix(in srgb,var(--card) 40%,transparent);
    border-top:1px solid var(--g-line);
}
.folder-thumb{background:color-mix(in srgb,var(--bg2) 55%,transparent);}
.folder-lock{
    background:var(--g-fill-strong);
    backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
    border-color:var(--g-brd);
}
.folder-card.drop{background:color-mix(in srgb,var(--accent) 12%,var(--g-fill));}
/* 새 노트(점선) 카드도 유리로 */
.add-card{
    border-radius:18px;
    border-color:color-mix(in srgb,var(--border) 72%,transparent);
    background:color-mix(in srgb,var(--card) 22%,transparent);
    backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
}
.add-card:hover{
    border-color:color-mix(in srgb,var(--accent) 60%,transparent);
    background:color-mix(in srgb,var(--accent) 8%,color-mix(in srgb,var(--card) 26%,transparent));
}
.breadcrumb button:hover{background:var(--g-in);}

/* ── ⑤ 모달 — 유리 시트 ─────────────────────────────────────── */
.modal-bg{
    background:rgba(15,18,28,.42);
    backdrop-filter:blur(9px) saturate(130%);
    -webkit-backdrop-filter:blur(9px) saturate(130%);
}
.dark .modal-bg:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(2,4,9,.58);}
.modal-box:not(.cards-box){
    --bg2:var(--g-in);
    background:var(--g-fill-strong);
    backdrop-filter:blur(26px) saturate(150%);
    -webkit-backdrop-filter:blur(26px) saturate(150%);
    border:1px solid var(--g-brd);
    border-radius:20px;
    box-shadow:var(--g-hi),var(--g-shadow-lg);
}
.dark .modal-box:not(.cards-box):not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:var(--g-brd);}
.modal-box:not(.cards-box) .set-row{border-bottom-color:var(--g-line);}
/* 인라인 4px 각진 버튼까지 통일 (스와치·아이콘 그리드 등 원형 계열은 예외) */
.modal-box:not(.cards-box) button:not(.ficon-btn):not(.fcolor-dot):not(.accent-swatch){
    border-radius:10px !important;
}
.modal-box:not(.cards-box) .import-btn{border-color:var(--g-line);}
/* 모달 안 입력칸 */
.modal-box:not(.cards-box) input:not([type=range]):not([type=checkbox]):not([type=file]),
.modal-box:not(.cards-box) select,
.modal-box:not(.cards-box) textarea{
    border-radius:10px;
    border-color:var(--g-line);
}

/* ── ⑥ 토스트 · 우클릭 메뉴 ─────────────────────────────────── */
.toast{
    background:rgba(17,20,30,.80);
    color:#fff;
    border:1px solid rgba(255,255,255,.14);
    border-radius:13px;
    backdrop-filter:blur(14px) saturate(140%);
    -webkit-backdrop-filter:blur(14px) saturate(140%);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.10),var(--g-shadow-lg);
}
.ctx-menu{
    background:var(--g-fill-strong);
    backdrop-filter:blur(20px) saturate(150%);
    -webkit-backdrop-filter:blur(20px) saturate(150%);
    border:1px solid var(--g-brd);
    border-radius:calc(14px * var(--ctxz));
    box-shadow:var(--g-hi),var(--g-shadow-lg);
}
.ctx-item:hover{background:color-mix(in srgb,var(--accent) 12%,transparent);}

/* ── ⑦ 팝오버 (서버 상태 · 알림 · 악보 · 음악 목록 등) ──────── */
.srv-pop,.notif-pop,.more-panel,.mp-list,#plPickPop,#mpVolPop,#musicListPop{
    background:var(--g-fill-strong);
    backdrop-filter:blur(var(--g-blur-lg)) saturate(150%);
    -webkit-backdrop-filter:blur(var(--g-blur-lg)) saturate(150%);
    border:1px solid var(--g-brd);
    box-shadow:var(--g-hi),var(--g-shadow-lg);
}
.more-panel{border-radius:16px;}
.notif-item:hover{background:var(--g-in);}
.notif-head button{background:var(--g-in);}
.mp-list{--bg2:var(--g-in);}
.mp-list .mp-search{border-color:var(--g-line);}
.mp-tabs button{border-color:var(--g-line);}
@media (min-width:641px){ .mp-list{border-radius:16px;} }

/* ── ⑧ 하단 음악 바 · 음악 칩 ─────────────────────────────── */
.mp.mp-bar{
    --bg2:var(--g-in);
    background:var(--g-fill-strong);
    backdrop-filter:blur(20px) saturate(155%);
    -webkit-backdrop-filter:blur(20px) saturate(155%);
    border:1px solid var(--g-brd);
    border-radius:18px;
    box-shadow:var(--g-hi),var(--g-shadow-lg);
}
.dark .mp.mp-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:var(--g-brd);}
.mp-xtra{
    background:var(--g-fill-strong);
    backdrop-filter:blur(18px) saturate(150%);
    -webkit-backdrop-filter:blur(18px) saturate(150%);
    border:1px solid var(--g-brd);
    border-radius:14px;
    box-shadow:var(--g-hi),var(--g-shadow-lg);
}
/* 음악이 접혔을 때 떠 있는 다시 열기 칩 — 유리 원반 */
#mpReopen{
    background:var(--g-fill-strong);
    color:var(--accent);
    border:1px solid var(--g-brd);
    backdrop-filter:blur(14px) saturate(150%);
    -webkit-backdrop-filter:blur(14px) saturate(150%);
    box-shadow:var(--g-hi),var(--g-shadow);
}
#mpReopen:hover{box-shadow:var(--g-hi),var(--g-shadow-lg);}

/* ── ⑨ 에디터 — 글쓰기 집중 화면은 불투명하게 ───────────────────
   15.1 에서 에디터를 반투명 + backdrop-filter 로 바꿨더니, 전체 화면을
   덮는 에디터( transform slide-in )가 뒤에 깔린 오로라·유리 카드 등
   복잡한 화면 위에서 합성 레이어를 제대로 그리지 못해 **본문이 하얗게
   비어 보이는** 렌더링 문제가 폰·PC 가릴 것 없이 생겼다.
   에디터는 글쓰기 집중 화면이므로 불투명이 더 자연스럽고 안정적이다.
   (툴바·사이드바의 유리 질감은 그대로 둔다) */
/* ── ⑨ 에디터 ─────────────────── */
.editor{background:var(--bg2);}
.editor-toolbar{
    --bg2:var(--g-in);
    background: rgba(255, 255, 255, 0.75) !important;
    backdrop-filter: blur(20px) saturate(160%) !important;
    -webkit-backdrop-filter: blur(20px) saturate(160%) !important;
    border-bottom: 1px solid rgba(0, 0, 0, 0.08) !important;
    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04) !important;
    display: grid !important;
    grid-template-columns: 1fr auto 1fr !important;
    padding: 0 14px !important;
    height: 48px !important;
    min-height: 48px !important;
    align-items: center !important;
    z-index: 1500;
}
.dark .editor-toolbar:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    background: rgba(20, 20, 25, 0.75) !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
    box-shadow: 0 2px 16px rgba(0, 0, 0, 0.3) !important;
}

.tb-left { display: flex; align-items: center; gap: 8px; min-width: 0; }
.tb-title-wrap { display: flex; flex-direction: row; align-items: center; gap: 8px; min-width: 0; flex: 1 1 auto; }
#edTitle { 
    font-size: 14px !important; 
    font-weight: 500 !important; 
    padding: 4px 8px !important; 
    border-radius: 6px;
    background: transparent;
    border: 1px solid transparent;
    max-width: 200px;
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
    height: 32px;
}
#edTitle:hover { background: rgba(0,0,0,0.04); }
.dark #edTitle:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)) { background: rgba(255,255,255,0.06); }
#edTitle:focus { background: var(--card); border-color: var(--accent); }

#saveState {
    font-size: 11.5px !important;
    color: var(--text3) !important;
    white-space: nowrap;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 3px;
    font-weight: 500;
    opacity: 0.85;
    transition: opacity .2s, color .2s;
}

.tb-mid { display: flex; align-items: center; justify-content: center; gap: 4px !important; }

.tb-group {
    background: rgba(0, 0, 0, 0.03) !important;
    padding: 2px 4px !important;
    border-radius: 9px !important;
    display: flex;
    align-items: center;
    gap: 1px;
    border: 1px solid rgba(0, 0, 0, 0.04) !important;
}
.dark .tb-group:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    background: rgba(255, 255, 255, 0.04) !important;
    border-color: rgba(255, 255, 255, 0.06) !important;
}

.tool-btn {
    width: 32px !important;
    height: 32px !important;
    border-radius: 7px !important;
    font-size: 16px !important;
    transition: all 0.18s cubic-bezier(0.4, 0, 0.2, 1) !important;
    color: var(--text2) !important;
}

.tool-btn:hover {
    background: var(--card) !important;
    color: var(--accent) !important;
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
.dark .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    background: rgba(255, 255, 255, 0.12) !important;
}

.tool-btn.accent {
    background: var(--accent) !important;
    color: white !important;
    box-shadow: 0 2px 10px color-mix(in srgb, var(--accent) 35%, transparent) !important;
}
.tool-btn.core-tool {
    color: #2563eb !important;
    background: rgba(37, 99, 235, 0.08) !important;
}
.dark .tool-btn.core-tool:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    color: #60a5fa !important;
}

.tool-btn.sm {
    width: 28px !important;
    height: 28px !important;
    font-size: 14px !important;
}

.font-btn {
    height: 28px !important;
    background: var(--card) !important;
    border-radius: 6px !important;
    font-weight: 700 !important;
    font-size: 11.5px !important;
    padding: 0 8px !important;
    border: 1px solid var(--border) !important;
}
.dark .font-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    background: rgba(255, 255, 255, 0.05) !important;
    border-color: rgba(255,255,255,0.1) !important;
}

.pg-nav {
    border-radius: 8px !important;
    background: rgba(0, 0, 0, 0.03) !important;
    padding: 2px 4px !important;
    border: 1px solid rgba(0, 0, 0, 0.05) !important;
    height: 28px !important;
}
.dark .pg-nav:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    background: rgba(255, 255, 255, 0.04) !important;
    border-color: rgba(255,255,255,0.06) !important;
}
.pg-nav input { font-size: 12px !important; width: 30px !important; height: 22px !important; }
.pg-nav button { width: 18px !important; height: 18px !important; font-size: 12px !important; }

.tool-sep{ background: rgba(0,0,0,0.08) !important; width:1px; height:18px; margin:0 4px; }
.dark .tool-sep:not(:where(.sdy-editor-light,.sdy-editor-light *)) { background: rgba(255,255,255,0.1) !important; }

/* 종이 배경 & 레이아웃
   14.72.6 · 노트 바깥 주변 배경(캔버스)은 --editor-canvas 토큰으로 어둡게.
   종이(.paper) 자체는 그대로 유지한다. */
.editor-body {
    background: var(--editor-canvas) !important;
    padding: 20px 20px 80px !important;
    flex: 1;
    overflow: auto;
    scroll-behavior: smooth;
    min-width: 0;
    overflow-anchor:none;
}
.dark .editor-body:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    background: var(--editor-canvas) !important;
    overflow-anchor:none;
}
.paper{
    border-radius: 0 !important;
    box-shadow: var(--paper-shadow) !important;
    border: 1px solid rgba(0,0,0,0.06) !important;
}
.dark .paper:not(:where(.sdy-editor-light,.sdy-editor-light *)) {
    border-color: rgba(255,255,255,0.06) !important;
    box-shadow: 0 12px 40px rgba(0,0,0,0.5) !important;
}

/* 포커스 시 툴바 숨김 애니메이션 */
.editor.focus-on .editor-toolbar {
    transform: translateY(-100%);
    transition: transform 0.3s ease;
}
/* 종이 자체는 읽기 영역이라 불투명 유지 — 그림자만 부드럽게 */
.paper{border-radius:0;}

/* ── ⑩ 로딩·스플래시·환영·알림 바 ──────────────────────────── */
#splash{
    /* 14.80.1 · 로딩 화면 전체를 로고 종이 면으로 — 아이콘·워드마크 여백이 면에 섞여 사라진다 */
    background:var(--logo-paper)!important;
}
#splash .sp-logo{
    background:var(--logo-paper)!important;
    box-shadow:none!important;
    border:none!important;
}
#edLoading{
    background:color-mix(in srgb,var(--bg) 55%,transparent);
    backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
}
#welcomeToast{
    background:rgba(17,24,39,.82);
    backdrop-filter:blur(18px) saturate(140%);
    -webkit-backdrop-filter:blur(18px) saturate(140%);
    border:1px solid rgba(255,255,255,.14);
    border-radius:18px;
}
#welcomeToast .wc-ico{border-radius:12px;}
#trProg{
    background:var(--g-fill-strong);
    backdrop-filter:blur(18px) saturate(150%);
    -webkit-backdrop-filter:blur(18px) saturate(150%);
    border-color:var(--g-brd);
}
#staleBar{border-radius:16px;}

/* ── ⑪ 스크롤바 — 유리 위에 떠 보이는 반투명 막대 ─────────── */
*::-webkit-scrollbar-thumb{
    background:color-mix(in srgb,var(--text3) 42%,transparent);
    border-radius:8px;border:2px solid transparent;background-clip:padding-box;
}
*::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text3) 66%,transparent);
    border:2px solid transparent;background-clip:padding-box;}
*{scrollbar-color:color-mix(in srgb,var(--text3) 42%,transparent) transparent;}


/* === style block 12 === */

/* ── 오늘의 추천 논문 ─────────────────────────────────────────
   증시 현황판처럼 헤더 바로 아래 천장에 붙은 완전한 띠. 라운드·그림자·위 여백
   없이 mainView 폭 전체를 꽉 채운다. 고정된 제목 칸은 없고, 날짜 멘트 리드부터
   논문 항목까지 줄 자체가 한 방향으로 흘러간다. */
.paper-ticker{
    width:100%;height:36px;margin:0;
    display:flex;align-items:stretch;overflow:hidden;
    color:#f8fbff;background:#14366e;border-bottom:1px solid #0d2857;
    font-family:'Jua','Pretendard Variable',Pretendard,-apple-system,'Segoe UI',sans-serif;
}
.paper-ticker[hidden]{display:none!important;}
.paper-ticker-viewport{
    position:relative;min-width:0;flex:1;overflow:hidden;display:flex;align-items:center;
    mask-image:linear-gradient(to right,transparent 0,#000 22px,#000 calc(100% - 22px),transparent 100%);
    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 22px,#000 calc(100% - 22px),transparent 100%);
}
.paper-ticker-run{
    display:flex;align-items:center;width:max-content;min-width:100%;
    will-change:transform;
    animation:paperTickerScroll var(--paper-ticker-duration,40s) linear infinite;
}
.paper-ticker-set{display:flex;align-items:center;flex:none;padding-right:40px;}
/* 띠 안을 함께 흐르는 리드 멘트 — '2026. 9. 11. 따끈따끈한 최신 논문'
   고정 칸 대신 1번 항목이 나오기 전에 띠가 직접 실어 나른다. */
.paper-ticker-lead{
    flex:none;display:inline-flex;align-items:center;gap:7px;padding:0 22px;
    color:#fff;background:#0d2857;border-right:1px solid rgba(255,255,255,.25);
    font-size:12px;letter-spacing:-.015em;white-space:nowrap;line-height:36px;
}
.paper-ticker-lead i{font-size:14px;color:#aee7ff;}
.paper-ticker-lead b{font-weight:800;font-variant-numeric:tabular-nums;}
.paper-ticker-paper{
    display:inline-flex;align-items:center;gap:7px;max-width:620px;padding:0 20px;
    color:#f8fbff;text-decoration:none;white-space:nowrap;line-height:36px;
    font-size:12.5px;font-weight:650;letter-spacing:-.012em;
    border-right:1px solid rgba(225,241,255,.30);
    transition:background .16s ease,color .16s ease;
}
.paper-ticker-paper:hover,.paper-ticker-paper:focus-visible{
    color:#fff;background:rgba(255,255,255,.15);outline:none;
}
.paper-ticker-paper:focus-visible{box-shadow:inset 0 0 0 2px #bdeaff;}
.paper-ticker-rank{
    flex:none;color:#aee7ff;font-size:10px;font-weight:850;font-variant-numeric:tabular-nums;
    letter-spacing:.06em;
}
.paper-ticker-title{overflow:hidden;text-overflow:ellipsis;}
.paper-ticker-paper>i{flex:none;font-size:12px;opacity:.8;}
.paper-ticker:hover .paper-ticker-run,
.paper-ticker:focus-within .paper-ticker-run{animation-play-state:paused;}
@keyframes paperTickerScroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.paper-ticker-run{animation:none;}}

/* 설정의 추천 키워드: 입력 → 등록 → 지울 수 있는 칩. */
.paper-keyword-row{align-items:flex-start;}
.paper-keyword-control{flex:0 1 238px;min-width:0;margin-left:auto;}
.paper-keyword-form{display:flex;align-items:center;gap:6px;}
.set-row .paper-keyword-form input[type=text]{flex:1;min-width:0;max-width:none;width:100%;}
.paper-keyword-add{
    flex:none;padding:7px 10px;border:1px solid color-mix(in srgb,var(--accent) 62%,var(--border));
    border-radius:5px;background:var(--accent);color:#fff;font-size:12px;font-weight:750;cursor:pointer;
}
.paper-keyword-add:hover{filter:brightness(1.06);}
.paper-keyword-add:focus-visible,.paper-keyword-remove:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.paper-keyword-chips{display:flex;flex-wrap:wrap;align-items:center;gap:5px;margin-top:7px;min-height:20px;}
.paper-keyword-chip{
    display:inline-flex;align-items:center;max-width:100%;overflow:hidden;
    border:1px solid color-mix(in srgb,var(--accent) 28%,var(--border));border-radius:999px;
    background:color-mix(in srgb,var(--accent) 8%,var(--bg2));color:var(--text2);font-size:11.5px;font-weight:700;
}
.paper-keyword-chip>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:4px 2px 4px 9px;}
.paper-keyword-remove{
    width:23px;height:23px;flex:none;display:inline-flex;align-items:center;justify-content:center;
    border:0;border-radius:50%;background:transparent;color:var(--text3);font-size:13px;cursor:pointer;
}
.paper-keyword-remove:hover{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);}
.paper-keyword-empty{font-size:10.5px;line-height:1.45;color:var(--text3);}

.home-stack-area{
    width:100%;flex:1 1 100%;
    display:flex;flex-direction:column;align-items:center;
    min-width:0;padding:0 0 18px;
}
.home-stack-upper{
    /* 17.2 · 넓은 PC에서도 스택이 화면 한가운데 알맞은 크기로 모이도록
       최대 폭을 제한한다. 폰(.note-grid 8px 패딩)에서는 100%를 쓴다. */
    width:100%;max-width:920px;margin:0 auto;
    display:flex;flex-direction:column;align-items:center;
    position:relative;isolation:isolate;
}
.home-add-note{
    appearance:none;-webkit-appearance:none;
    display:inline-flex;align-items:center;gap:9px;
    min-height:42px;padding:5px 15px 5px 7px;
    border:1px solid color-mix(in srgb,var(--border) 88%,transparent);
    border-radius:999px;
    background:color-mix(in srgb,var(--card) 54%,transparent);
    color:var(--text2);font-size:12.5px;font-weight:800;
    cursor:pointer;box-shadow:0 7px 20px rgba(25,35,75,.10),inset 0 1px 0 rgba(255,255,255,.35);
    backdrop-filter:blur(12px) saturate(140%);
    -webkit-backdrop-filter:blur(12px) saturate(140%);
    transition:transform .25s cubic-bezier(.22,.9,.3,1),color .2s,border-color .2s,box-shadow .2s,background .2s;
    z-index:100;
}
.home-add-icon{
    width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;
    /* 무지개 그라데이션 대신 카드와 같은 결의 차분한 색 */
    color:var(--text2);
    background:color-mix(in srgb,var(--text2) 9%,var(--card));
    border:1px solid color-mix(in srgb,var(--border) 85%,transparent);
    font-size:21px;line-height:1;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.35);
    transition:color .2s,background .2s,border-color .2s;
}
.home-add-note:hover,.home-stack-upper.fanned .home-add-note{
    color:var(--accent);border-color:color-mix(in srgb,var(--accent) 65%,var(--border));
    background:color-mix(in srgb,var(--accent) 10%,var(--card));
    box-shadow:0 10px 26px color-mix(in srgb,var(--accent) 18%,transparent),inset 0 1px 0 rgba(255,255,255,.4);
    transform:translateY(-2px);
}
.home-add-note:hover .home-add-icon,.home-stack-upper.fanned .home-add-icon{
    color:var(--accent);
    background:color-mix(in srgb,var(--accent) 14%,var(--card));
    border-color:color-mix(in srgb,var(--accent) 38%,var(--border));
}
.home-add-note:active{transform:scale(.97);}
/* ── 최근 줄이 있는 홈: 클래식 새 노트 버튼 + 화면 맞춤 두 줄 ──
   긴 안내 구역/문구는 없앴다. 안 본 노트 더미와 이미 본 노트가 화면에
   정확히 두 줄로 들어오며, 그 바로 위의 버튼은 휠 한 칸에 나타난다. */
.home-add-zone{width:100%;display:flex;justify-content:center;padding-bottom:14px;box-sizing:border-box;}
.home-stack-area.has-recent .home-add-zone{
    height:60px;min-height:60px;box-sizing:border-box;
    align-items:center;padding:7px 0 11px;
}
.home-stack-area.has-recent .home-add-note{
    box-shadow:0 10px 26px color-mix(in srgb,var(--accent) 12%,transparent),
               0 5px 14px rgba(25,35,75,.08),inset 0 1px 0 rgba(255,255,255,.35);
}
.stack-scene{
    width:100%;min-height:0!important;
    display:flex;align-items:center;justify-content:center;
    padding:8px 18px 14px;
    perspective:1300px;overflow:visible;
}
.note-stack{
    position:relative;width:100%;max-width:760px;min-height:300px;
    display:flex;align-items:center;justify-content:center;overflow:visible;
    cursor:default;
}
.note-stack .note-card,.note-stack .folder-card{
    position:absolute;left:50%;top:50%;margin:0;
    width:200px;flex:0 0 200px;
    transform:translate(-50%,-50%);
    transform-origin:50% 108%;
    transition:transform .52s cubic-bezier(.22,.9,.3,1.08),box-shadow .35s ease,opacity .35s ease,border-color .2s;
    will-change:transform;
}
.note-stack .note-card:hover,.note-stack .folder-card:hover{
    z-index:100!important;
    box-shadow:0 24px 52px rgba(15,23,42,.25),0 0 0 1px color-mix(in srgb,var(--accent) 25%,transparent)!important;
}
.note-stack.fanned .note-card,.note-stack.fanned .folder-card{cursor:pointer;}
/* 스택 폴더 썸은 .folder-thumb / body.card-s|l 높이를 그대로 쓴다.
   예전 고정 260px 은 특이도(0,3,0)가 body.card-l .folder-thumb(322px)를 이겨
   첫 방문(.has-recent 없음)에서 폴더만 세로로 짧고 노트가 튀어 보였다. */
.stack-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--text3);font-size:12.5px;pointer-events:none;}
.stack-empty i{font-size:30px;opacity:.45;}
.recent-section{
    width:100%;max-width:none;margin-top:0;padding:6px 0 0;
}
.recent-row{
    display:flex;flex-wrap:nowrap;gap:14px;align-items:flex-start;
    width:max-content;max-width:calc(100vw - 36px);margin:0 auto -32px;
    /* 아래·옆 여백을 넉넉히 둔다 — 가로 스크롤(overflow-x)이 걸린 상자는
       세로 방향도 함께 잘리므로(overflow-y:visible 이 auto 로 계산됨),
       올라간 카드의 그림자가 전부 이 안에 들어와야 잘리지 않는다. */
    padding:18px 16px 46px;overflow-x:auto;overflow-y:visible;
    justify-content:flex-start;scrollbar-width:thin;
}
/* 크기는 위 스택 카드와 완전히 같게 — 폭·미리보기 높이 모두 기본값을 쓴다. */
.recent-row .note-card{
    position:relative;left:auto;top:auto;max-width:none;flex-shrink:0;
    transform:none;opacity:1;
}
.recent-row .note-card:hover{transform:translateY(-5px);z-index:5;}
body.card-s .note-stack .note-card,body.card-s .note-stack .folder-card{width:160px;flex-basis:160px;}
body.card-l .note-stack .note-card,body.card-l .note-stack .folder-card{width:244px;flex-basis:244px;}

/* JS가 실제 스크롤 화면 높이·고정 헤더·아래 안전 여백을 재서 두 줄 높이와
   카드 폭을 넣는다. 설정한 카드 크기는 최대치가 되고 낮은 창에서는 자동 축소. */
.home-stack-area.has-recent .stack-scene,
.home-stack-area.has-recent .recent-section{
    height:calc(var(--home-rows-h,680px) / 2);min-height:0;flex:0 0 auto;
    box-sizing:border-box;
}
.home-stack-area.has-recent .stack-scene{
    padding:7px 18px!important;
}
.home-stack-area.has-recent .note-stack{
    height:100%!important;min-height:0!important;
}
.home-stack-area.has-recent .recent-section{
    display:flex;align-items:stretch;padding:0!important;margin:0!important;
    /* 홈 콘텐츠 중에는 가장 위, sticky 헤더(z=50)보다는 아래 */
    position:relative;z-index:40;overflow:visible;isolation:isolate;
}
.home-stack-area.has-recent .recent-row{
    width:max-content;height:calc(100% + 112px);box-sizing:border-box;
    /* 가로 스크롤 상자는 세로 overflow도 함께 잘라 버린다. 그래서 둘째 줄의
       실제 클리핑 경계를 112px 아래로 내리고 음수 여백으로 두 줄 높이는 그대로
       유지한다. 어두운 테마의 큰 70px blur도 내부 안전 영역에서 끝까지 보인다. */
    align-items:center;padding:14px 18px 126px!important;margin:0 auto -112px!important;
    overflow-x:auto;overflow-y:hidden;position:relative;z-index:1;
    isolation:isolate;
}
.home-stack-area.has-recent .note-stack .note-card,
.home-stack-area.has-recent .note-stack .folder-card,
.home-stack-area.has-recent .recent-row .note-card{
    width:var(--home-card-w,200px)!important;
    flex:0 0 var(--home-card-w,200px)!important;
    max-width:none!important;
}
.home-stack-area.has-recent .note-preview,
.home-stack-area.has-recent .folder-thumb{
    height:calc(var(--home-card-w,200px) * 1.3)!important;
    min-height:0!important;aspect-ratio:auto!important;
}

@media(max-width:640px){
    .home-stack-area{padding-bottom:10px;}
    .home-stack-upper{width:100%;}
    .home-add-note{min-height:38px;padding-right:12px;font-size:11.5px;gap:7px;}
    .home-add-icon{width:28px;height:28px;font-size:19px;}
    .stack-scene{padding:5px 8px 10px;}
    .note-stack{min-height:230px;}
    body .note-stack .note-card,body .note-stack .folder-card,
    body.card-s .note-stack .note-card,body.card-s .note-stack .folder-card,
    body.card-l .note-stack .note-card,body.card-l .note-stack .folder-card,
    body .recent-row .note-card,
    body.card-s .recent-row .note-card,
    body.card-l .recent-row .note-card{
        width:min(196px,calc(100vw - 56px))!important;
        flex:0 0 min(196px,calc(100vw - 56px))!important;
        max-width:none!important;
    }
    .note-stack .folder-card .folder-thumb{height:auto;aspect-ratio:4/5;}
    .recent-section{margin-top:0;padding-top:2px;}
    .recent-row{gap:10px;max-width:calc(100vw - 20px);
        padding:12px 12px 34px;margin-bottom:-24px;}
    body .recent-row .note-preview,
    body.card-s .recent-row .note-preview,
    body.card-l .recent-row .note-preview{height:auto;aspect-ratio:4/5;}
}
@media(prefers-reduced-motion:reduce){
    .home-add-note,.note-stack .note-card,.note-stack .folder-card{transition:none;}
}
/* === 사용자 요청 수정 === */
.home-stack-area{padding-top:0 !important;}
.home-stack-upper{border-bottom:none !important;}
.stack-scene{padding-bottom:2px !important;}
.recent-section{padding-top:0 !important;margin-top:-4px !important;border-top:none !important;}
.recent-section > *:not(.recent-row){display:none !important;}
.recent-row{padding-bottom:72px !important;margin-bottom:-40px !important;}
.recent-row .note-card{
    position:relative;left:auto;top:auto;max-width:none;flex-shrink:0;transform:none;opacity:1;width:200px;flex:0 0 200px;
    z-index:1;isolation:isolate;
    box-shadow:var(--g-hi),
               0 2px 5px -1px rgba(15,23,42,.08),
               0 10px 24px -6px rgba(15,23,42,.16),
               0 22px 42px -12px rgba(15,23,42,.22) !important;
    transition:transform .28s cubic-bezier(.22,.9,.3,1),box-shadow .28s ease,border-color .2s ease;
}
.dark .recent-row .note-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){
    box-shadow:var(--g-hi),
               0 2px 6px -1px rgba(0,0,0,.40),
               0 12px 28px -6px rgba(0,0,0,.55),
               0 26px 48px -12px rgba(0,0,0,.68) !important;
}
.recent-row .note-card:hover{
    transform:translateY(-6px) scale(1.015) !important;
    z-index:100 !important;
    box-shadow:var(--g-hi),
               0 4px 10px -2px rgba(15,23,42,.12),
               0 18px 36px -6px rgba(15,23,42,.24),
               0 34px 60px -14px rgba(15,23,42,.32),
               0 0 0 1px color-mix(in srgb,var(--accent) 26%,transparent) !important;
}
.dark .recent-row .note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
    box-shadow:var(--g-hi),
               0 4px 12px -2px rgba(0,0,0,.50),
               0 20px 42px -6px rgba(0,0,0,.65),
               0 40px 70px -14px rgba(0,0,0,.78),
               0 0 0 1px color-mix(in srgb,var(--accent) 30%,transparent) !important;
}
body.card-s .recent-row .note-card{width:160px;flex-basis:160px !important;}
body.card-l .recent-row .note-card{width:244px;flex-basis:244px !important;}
.home-add-note{box-shadow:0 7px 20px rgba(25,35,75,.06),inset 0 1px 0 rgba(255,255,255,.35) !important;}
.home-add-icon{background:var(--card) !important;border-color:var(--border) !important;color:var(--text1) !important;}
.home-add-note:hover .home-add-icon{color:#fff !important;background:var(--accent) !important;border-color:var(--accent) !important;}



/* ═══════════════════════════════════════════════════════════════════
     16.2/16.4 · 로그인/회원 (등록 OTP + 비밀번호 로그인) + 엽스코드 입장 게이트
       · 헤더 계정 버튼(#sdyAccBtn) — 로그인하면 점이 켜진다
       · 로그인 모달(#sdyAuthWrap) — 로그인하기 / 등록하기 분리
       · 엽스코드 게이트(#ypGate) — '로그인하고 입장 / 비회원으로 입장'
       · 회원 배지(.yp-verified) · 올린 곡 표시(.mp-upmark)
     ═══════════════════════════════════════════════════════════════════ */

/* ── 헤더 계정 버튼 ── */
#sdyAccBtn{position:relative;}
#sdyAccBtn.on{color:var(--accent);}
.acc-dot{position:absolute;top:auto;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;
  background:#22c55e;box-shadow:0 0 0 2px var(--card);pointer-events:none;}

/* ── 로그인 모달 ── */
#sdyAuthWrap{position:fixed;inset:0;z-index:12000;display:flex;align-items:center;justify-content:center;
  background:rgba(15,18,28,.45);backdrop-filter:blur(6px);}
.sa-card{width:min(360px,calc(100vw - 36px));background:var(--card);border:1px solid var(--border);
  border-radius:18px;padding:26px 24px 22px;box-shadow:0 24px 70px rgba(10,14,30,.28);
  display:flex;flex-direction:column;gap:12px;position:relative;animation:saPop .22s cubic-bezier(.2,.9,.3,1.2);}
@keyframes saPop{from{opacity:0;transform:translateY(14px) scale(.97);}to{opacity:1;transform:none;}}
.sa-x{position:absolute;top:10px;right:10px;border:none;background:transparent;color:var(--text3);
  font-size:19px;cursor:pointer;width:30px;height:30px;border-radius:8px;}
.sa-x:hover{background:var(--bg2);color:var(--text1);}
.sa-logo{width:44px;height:44px;border-radius:13px;display:flex;align-items:center;justify-content:center;
  background:var(--logo-paper);}
.sa-ttl{font-size:19px;font-weight:800;}
.sa-sub{font-size:12px;color:var(--text3);line-height:1.45;margin-top:-6px;}
.sa-tabs{display:flex;gap:6px;background:var(--bg2);border:1px solid var(--border);border-radius:12px;padding:4px;}
.sa-tabs button{flex:1;border:none;border-radius:9px;background:transparent;color:var(--text3);height:32px;
  font-size:12px;font-weight:800;cursor:pointer;transition:background .15s,color .15s,box-shadow .15s;}
.sa-tabs button.on{background:var(--card);color:var(--accent);box-shadow:0 2px 9px rgba(10,14,30,.08);}
.sa-step{display:flex;flex-direction:column;gap:9px;}
.sa-step input{height:42px;border:1px solid var(--border);border-radius:10px;background:var(--bg2);
  color:var(--text1);font-size:14px;padding:0 13px;outline:none;width:100%;min-width:0;}
.sa-step input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(79,110,247,.15);}
/* 이메일 입력 + 작은 '인증코드 받기' 버튼을 한 줄에 */
.sa-emailrow{display:flex;gap:8px;align-items:stretch;}
.sa-sendbtn{flex:0 0 auto;height:42px;padding:0 15px;border:none;border-radius:12px;
  background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 72%,#8b5cf6));
  box-shadow:0 7px 18px color-mix(in srgb,var(--accent) 26%,transparent),inset 0 1px 0 rgba(255,255,255,.28);
  color:#fff;font-size:12.5px;font-weight:700;letter-spacing:.01em;cursor:pointer;
  white-space:nowrap;transition:filter .15s,transform .12s,box-shadow .2s;}
.sa-sendbtn:hover{filter:brightness(1.08);}
.sa-sendbtn:active{transform:scale(.97);}
.sa-sendbtn:disabled{opacity:.55;cursor:not-allowed;}
/* 17.4 · 로그인 확인/재전송 버튼 — 글자를 줄이고 아이콘을 곁들인 조용한 결 */
.sa-btn{height:42px;border:none;border-radius:12px;color:#fff;font-size:12.5px;
  letter-spacing:.01em;font-weight:700;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 72%,#8b5cf6));
  box-shadow:0 7px 18px color-mix(in srgb,var(--accent) 26%,transparent),inset 0 1px 0 rgba(255,255,255,.28);
  transition:filter .15s,transform .12s,box-shadow .2s;}
.sa-btn i{font-size:14px;opacity:.92;}
.sa-btn:hover{filter:brightness(1.07);box-shadow:0 9px 22px color-mix(in srgb,var(--accent) 34%,transparent),inset 0 1px 0 rgba(255,255,255,.28);}
.sa-btn:active{transform:scale(.975);}
.sa-btn:disabled{opacity:.55;cursor:not-allowed;transform:none;}
.sa-btn.ghost{background:var(--bg2);color:var(--text1);border:1px solid var(--border);}
.sa-sent{font-size:12px;color:var(--text2);background:var(--bg2);border-radius:9px;padding:8px 11px;
  word-break:break-all;}
#saCode{letter-spacing:7px;text-align:center;font-size:17px;font-weight:700;}
.sa-nickrow{display:flex;flex-direction:column;gap:4px;}
.sa-nicksub{font-size:11px;color:var(--text3);}
.sa-linkbtn{border:1px solid var(--border);background:var(--bg2);color:var(--text3);font-size:11.5px;
  font-weight:700;letter-spacing:.01em;cursor:pointer;border-radius:999px;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:32px;padding:0 16px;
  transition:color .15s,border-color .15s,background .15s,transform .12s;}
.sa-linkbtn i{font-size:12.5px;}
.sa-linkbtn:hover{color:var(--text1);border-color:color-mix(in srgb,var(--text3) 45%,var(--border));background:color-mix(in srgb,var(--bg2) 70%,var(--card));}
.sa-linkbtn:active{transform:scale(.97);}
.sa-linkbtn:disabled{opacity:.5;cursor:not-allowed;transform:none;}
.sa-me{display:flex;align-items:center;gap:8px;font-size:16px;font-weight:800;padding:2px 0 4px;}
.sa-me>i:first-child{width:34px;height:34px;border-radius:10px;background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:16px;flex:none;}
.sa-row{display:flex;align-items:center;gap:10px;font-size:13px;min-height:36px;}
.sa-row>label{width:88px;flex:none;color:var(--text3);font-size:12px;}
.sa-row>span:not(.sa-nickedit){color:var(--text1);word-break:break-all;}
.sa-nickedit{display:flex;gap:6px;flex:1;min-width:0;}
.sa-nickedit input{flex:1;min-width:0;height:34px;border:1px solid var(--border);border-radius:8px;
  background:var(--bg2);color:var(--text1);font-size:13px;padding:0 10px;outline:none;}
.sa-nickedit input:focus{border-color:var(--accent);}
.sa-pwneed{font-size:12px;font-weight:800;color:#b45309;background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.22);
  border-radius:10px;padding:8px 10px;}
.sa-pwbox{display:grid;grid-template-columns:1fr;gap:7px;padding:8px;border:1px solid var(--border);border-radius:12px;background:color-mix(in srgb,var(--bg2) 74%,transparent);}
.sa-pwbox input{height:36px;border:1px solid var(--border);border-radius:9px;background:var(--card);color:var(--text1);font-size:13px;padding:0 10px;outline:none;}
.sa-pwbox input:focus{border-color:var(--accent);}
.sa-mini{border:1px solid var(--border);background:var(--bg2);color:var(--text1);border-radius:8px;
  font-size:12px;padding:0 12px;cursor:pointer;flex:none;}
.sa-mini.wide{height:34px;width:100%;font-weight:800;}
.sa-mini:hover{border-color:var(--accent);color:var(--accent);}
.sa-err{font-size:12px;color:#ef4444;background:rgba(239,68,68,.08);border-radius:8px;padding:7px 10px;}

/* ── 엽스코드 입장 게이트 ── */
#ypGate{position:fixed;inset:0;z-index:11900;display:flex;align-items:center;justify-content:center;
  background:rgba(8,10,16,.55);backdrop-filter:blur(7px);}
.ypg-card{width:min(330px,calc(100vw - 36px));background:#14181f;border:1px solid #262b36;border-radius:18px;
  padding:24px 20px;display:flex;flex-direction:column;gap:12px;box-shadow:0 24px 70px rgba(0,0,0,.5);
  animation:saPop .22s cubic-bezier(.2,.9,.3,1.2);}
.ypg-ttl{font-size:19px;font-weight:800;color:#f2f4f8;display:flex;align-items:center;gap:8px;}
.ypg-sub{font-size:11.5px;color:#8b93a5;line-height:1.5;margin-top:-6px;}
.ypg-btn{display:flex;align-items:center;gap:12px;border:1px solid #2a303c;background:#1a1f29;color:#e7eaf0;
  border-radius:13px;padding:13px 14px;cursor:pointer;text-align:left;transition:background .15s,border-color .15s,transform .15s;}
.ypg-btn:hover{background:#222836;border-color:#39414f;transform:translateY(-1px);}
.ypg-btn>i{font-size:21px;color:#8b93a5;flex:none;}
.ypg-btn span{display:flex;flex-direction:column;gap:2px;min-width:0;}
.ypg-btn b{font-size:14px;}
.ypg-btn em{font-style:normal;font-size:11px;color:#8b93a5;}
.ypg-btn.main{background:linear-gradient(135deg,#5865f2,#7c5cf0);border-color:transparent;}
/* 14.65 · "로그인하고 입장" 글씨를 흰색으로 — 색 버튼 위에서 회색 라벨이 흐려 보이던 문제 */
.ypg-btn.main b{color:#fff;}
.ypg-btn.main:hover{background:linear-gradient(135deg,#6673f4,#8a6df2);}
.ypg-btn.main>i{color:#fff;}
.ypg-btn.main em{color:rgba(255,255,255,.75);}
/* 18.2 · 편지 해돌이 — 입장 게이트 카드 안에서도 잘 보이게 */
#ypGate .yp-otter{width:150px;margin:2px auto -2px;display:block;}

/* ── 엽스코드 회원 배지 (말풍선 이름·음성 칩·설정) ── */
.yp-verified{display:inline-flex;align-items:center;color:#5865f2;font-size:11px;vertical-align:middle;
  margin-left:4px;line-height:1;flex:none;}
.yp-verified i{font-size:12.5px;}
.yp-who .yp-verified{margin-left:5px;}
.yp-vchip .yp-verified{margin-left:3px;font-size:9px;}
.yp-vchip .yp-verified i{font-size:10.5px;}
.yp-set-member label{display:flex;align-items:center;gap:6px;min-width:0;}
.yp-set-member .yp-verified{margin-left:0;}
.yp-set-member .sub{margin-left:26px;}
.yp-set-login{flex:1;border:1px dashed #39414f;background:#1a1f29;color:#c9d2e0;border-radius:8px;
  font-size:11.5px;padding:8px 10px;cursor:pointer;display:flex;align-items:center;gap:6px;}
.yp-set-login:hover{border-color:#5865f2;color:#fff;background:#222836;}
.yp-set-login i{font-size:13px;}

/* ── 음악 목록 · '올린 사람' 마크 (작게) ── */
.mp-li .mp-upmark{flex:none;display:inline-flex;align-items:center;gap:3px;font-size:11px;color:#d0a020;font-weight:700;
  background:rgba(208,160,32,0.08);border:1px solid rgba(208,160,32,0.25);border-radius:999px;padding:2px 8px;
  max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3;box-shadow:0 1px 4px rgba(208,160,32,0.08);}
.mp-li .mp-upmark i{font-size:9px;flex:none;opacity:.85;}
.mp-li .mp-upmark:hover{color:var(--accent);border-color:var(--accent);}
.mp-li.on .mp-upmark{color:var(--accent);background:rgba(79,110,247,.12);border-color:rgba(79,110,247,.35);}

/* ═══════════════════════════════════════════════════════════════════
   16.3 · 친구 + 1:1 대화(DM) — 엽스코드 창 안의 뷰 전환
   공용방(ypBody) · 친구 목록(ypFriends) · 1:1 대화(ypDmBody) 셋이
   같은 자리를 바꿔 낀다.
   ═══════════════════════════════════════════════════════════════════ */

/* 헤더 친구 버튼 + 안 읽은 점 */
#ypHead #ypBack,#ypHead #ypFrBtn{position:relative;width:24px;height:19px;}
#ypHead #ypFrBtn i{font-size:12.5px;}
#ypHead .yp-frdot{position:absolute;top:-4px;right:-6px;min-width:14px;height:14px;padding:0 3px;
  border-radius:999px;background:#ef4444;color:#fff;font-size:9px;font-weight:800;line-height:14px;
  text-align:center;font-style:normal;box-shadow:0 0 0 2px #15181f;}

/* ── 친구 화면 (목록·요청·추가) — 공용방 본문 자리 ── */
.yp-dm-list{flex:none;flex-grow:1;overflow-y:auto;padding:12px 12px 10px;display:flex;flex-direction:column;gap:8px;
  background:radial-gradient(120% 90% at 50% 0%,#141821 0%,#0f1115 55%);min-height:80px;}
.yp-dm-list::-webkit-scrollbar{width:8px;}
.yp-dm-list::-webkit-scrollbar-thumb{background:#2a3040;border-radius:8px;}
.ypfr-ttl{font-size:10.5px;font-weight:800;color:#6b7484;letter-spacing:.4px;margin:8px 2px 0;display:flex;align-items:center;gap:6px;}
.ypfr-ttl:first-child{margin-top:0;}
.ypfr-ttl .cnt{background:#2a3140;color:#c6cdd9;border-radius:999px;font-size:9.5px;padding:0 6px;line-height:14px;}
.ypfr-ttl .cnt.hot{background:#ef4444;color:#fff;}
.ypfr-add{display:flex;gap:6px;padding:2px 0 4px;}
.ypfr-add input{flex:1;min-width:0;background:#1a1f27;border:1px solid #2c3342;color:#e7eaf0;border-radius:10px;
  font-size:12px;padding:8px 10px;outline:none;font-family:inherit;}
.ypfr-add input:focus{border-color:#8b5cf6;}
.ypfr-add input::placeholder{color:#6b7484;}
.ypfr-add button{flex:none;border:none;border-radius:10px;padding:0 12px;background:linear-gradient(135deg,#5865f2,#8b5cf6);
  color:#fff;font-size:12px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:5px;font-family:inherit;}
.ypfr-add button:hover{filter:brightness(1.12);}
.ypfr-add button:disabled{opacity:.55;cursor:default;filter:none;}
.ypfr-empty{padding:14px 8px;text-align:center;color:#6b7484;font-size:11.5px;line-height:1.75;}
.ypfr-empty b{color:#c6cdd9;}
.ypfr-item{display:flex;align-items:center;gap:9px;background:#161b24;border:1px solid #232a37;border-radius:12px;
  padding:8px 10px;transition:border-color .15s ease;}
.ypfr-item:hover{border-color:#39465c;}
.ypfr-ava{position:relative;width:32px;height:32px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;
  color:#1f2937;font-size:12px;font-weight:800;background:linear-gradient(135deg,#a5b4fc,#f0abfc);flex-shrink:0;}
.ypfr-ava .on-dot{position:absolute;right:-1px;bottom:-1px;width:11px;height:11px;border-radius:50%;background:#3f4756;
  border:2px solid #10141b;transition:background .2s ease;}
.ypfr-ava .on-dot.on{background:#22c55e;}
.ypfr-meta{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.25;}
.ypfr-meta b{font-size:12.5px;color:#e7eaf0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:flex;align-items:center;gap:4px;}
.ypfr-meta b .yp-verified{margin-left:1px;font-size:10px;}
.ypfr-meta span{font-size:10px;color:#6b7484;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ypfr-meta span.dim{font-style:normal;}
.ypfr-meta .last{color:#8b93a5;}
.ypfr-unread{flex:none;min-width:17px;height:17px;padding:0 5px;border-radius:999px;background:#ef4444;color:#fff;
  font-size:10px;font-weight:800;line-height:17px;text-align:center;box-shadow:0 2px 6px rgba(239,68,68,.4);}
.ypfr-btn{flex:none;border:1px solid #343c4c;background:#1d232e;color:#c6cdd9;border-radius:9px;font-size:11px;
  padding:6px 10px;cursor:pointer;font-weight:700;font-family:inherit;transition:all .15s ease;}
.ypfr-btn:hover{border-color:#5865f2;color:#fff;}
.ypfr-btn.main{border:none;background:linear-gradient(135deg,#5865f2,#8b5cf6);color:#fff;}
.ypfr-btn.main:hover{filter:brightness(1.12);}
.ypfr-btn.ghost{background:transparent;border-color:#2c3342;color:#8b93a5;font-weight:600;}
.ypfr-btn.ghost:hover{border-color:#ef4444;color:#fca5a5;}
.ypfr-login{margin:10px 2px;padding:16px 14px;text-align:center;background:#161b24;border:1px dashed #39414f;
  border-radius:14px;color:#9aa3b2;font-size:12px;line-height:1.8;}
.ypfr-login b{color:#e7eaf0;display:block;font-size:13px;margin-bottom:2px;}
.ypfr-login button{margin-top:9px;border:none;border-radius:10px;padding:9px 16px;background:linear-gradient(135deg,#5865f2,#8b5cf6);
  color:#fff;font-size:12.5px;font-weight:800;cursor:pointer;font-family:inherit;}
.ypfr-login button:hover{filter:brightness(1.12);}

/* ── 1:1 대화 본문 ── */
.yp-dmbody{min-height:80px;}
/* 상대가 아직 안 읽은 내 메시지 옆 '1' — 카톡처럼 버블 왼쪽 아래 */
.yp-bwrap .yp-dm-cnt{position:absolute;left:-15px;bottom:2px;font-size:9.5px;font-weight:800;color:#f0abfc;
  line-height:1;pointer-events:none;}
.yp-line:not(.me) .yp-dm-cnt{display:none;}
/* 칩의 DM 안 읽은 뱃지 */
#ypReopen .yp-badge.yp-dm{background:linear-gradient(135deg,#f43f5e,#ef4444);color:#fff;font-weight:800;font-size:10px;}
.yp-dm-more{align-self:center;border:1px solid #2c3342;background:#1a1f27;color:#9aa3b2;border-radius:999px;
  font-size:10.5px;padding:5px 12px;cursor:pointer;font-family:inherit;}
.yp-dm-more:hover{border-color:#5865f2;color:#fff;}

/* 17.5 · 하단 음악 목록: 바깥 시트뿐 아니라 검색 도구와 곡 목록도
   각각 부드러운 유리 곡면으로 감싸 흰색 사각 모서리가 삐져나오지 않게 한다. */
#musicListPop.mp-list{
    border-radius:22px;
    padding:10px;
    overflow:hidden;
    isolation:isolate;
    background-clip:padding-box;
}
#musicListPop .mp-library-tools{
    margin:0 0 8px;
    padding:9px;
    border:1px solid color-mix(in srgb,var(--border) 64%,transparent);
    border-radius:15px;
    background:color-mix(in srgb,var(--g-in) 78%,transparent);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.28);
    overflow:hidden;
}
#musicListPop .mp-search{
    border-radius:12px;
    background:color-mix(in srgb,var(--card) 42%,transparent);
    background-clip:padding-box;
}
#musicListPop .mp-lbody{
    padding:4px;
    border:1px solid color-mix(in srgb,var(--border) 58%,transparent);
    border-radius:15px;
    background:color-mix(in srgb,var(--card) 32%,transparent);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.2);
    background-clip:padding-box;
}
#musicListPop .mp-li,#musicListPop .mp-pl,#musicListPop .mp-plsub{
    border-radius:11px;
}
#musicListPop .mp-discover{
    border-radius:12px;
    overflow:hidden;
}
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
    #musicListPop.mp-list{
        border-radius:22px 22px 0 0;
        padding:10px max(10px,var(--ph-right)) calc(var(--ph-safe) + 10px) max(10px,var(--ph-left));
    }
    #musicListPop .mp-library-tools{padding:8px;margin-bottom:8px;border-radius:14px;}
    #musicListPop .mp-lbody{border-radius:14px;}
}

/* 17.6 · 음악 목록/확장 플레이어 가독성 정리
   탭 묶음을 감싸던 불투명 배경은 없애고 버튼 자체만 또렷하게 남긴다. */
#mpBig .mpb-tabs{
    display:flex;align-items:center;gap:5px;padding:2px 2px 0;
    background:transparent;border:0;border-radius:0;box-shadow:none;
}
#mpBig .mpb-tabs button{
    color:var(--text2);font-size:11.5px;font-weight:800;line-height:1.2;
    text-shadow:none;opacity:1;
}
#mpBig .mpb-tabs button:hover{color:var(--text1);background:color-mix(in srgb,var(--text1) 7%,transparent);}
#mpBig .mpb-tabs button.on{
    color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--card));
}
/* 전체 화면의 어두운 앰비언트 배경에서도 탭 글자가 묻히지 않게 복원한다. */
#mpBig.mpb-fs .mpb-tabs,#mpBig:fullscreen .mpb-tabs{
    padding:0;gap:5px;background:transparent!important;border:0!important;box-shadow:none!important;
}
#mpBig.mpb-fs .mpb-tabs button,#mpBig:fullscreen .mpb-tabs button{
    color:rgba(255,255,255,.88);background:transparent;border:0;
    font-size:11.5px;font-weight:800;text-shadow:0 1px 5px rgba(0,0,0,.38);
}
#mpBig.mpb-fs .mpb-tabs button:hover,#mpBig:fullscreen .mpb-tabs button:hover{
    color:#fff;background:rgba(255,255,255,.10);
}
#mpBig.mpb-fs .mpb-tabs button.on,#mpBig:fullscreen .mpb-tabs button.on{
    color:#fff;background:var(--accent);text-shadow:none;
}

/* 하단 컨트롤 바의 목록 검색은 작은 글자의 단일 유리 필로 통일한다. */
#musicListPop .mp-library-tools{
    position:relative;display:flex;align-items:center;gap:7px;
    margin:0 0 8px;padding:2px 2px 2px 12px;
    min-height:38px;border:1px solid color-mix(in srgb,var(--border) 78%,transparent);
    border-radius:999px;background:color-mix(in srgb,var(--card) 52%,transparent);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.24),0 5px 16px rgba(15,23,42,.06);
    overflow:hidden;transition:border-color .18s,box-shadow .18s,background .18s;
}
#musicListPop .mp-library-tools:focus-within{
    border-color:color-mix(in srgb,var(--accent) 58%,var(--border));
    background:color-mix(in srgb,var(--card) 74%,transparent);
    box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 13%,transparent),inset 0 1px 0 rgba(255,255,255,.3);
}
#musicListPop .mp-search-icon{flex:none;color:var(--text3);font-size:14px;line-height:1;}
#musicListPop .mp-search{
    flex:1;min-width:0;height:34px;margin:0;padding:0 2px;
    border:0!important;border-radius:0;background:transparent!important;box-shadow:none!important;
    color:var(--text1);font-size:12px!important;font-weight:600;letter-spacing:-.01em;outline:none;
}
#musicListPop .mp-search::placeholder{color:var(--text3);font-weight:500;}
#musicListPop .mp-library-tools .mp-sortbtn{
    flex:none;width:34px;height:34px;border:0;border-radius:50%;
    background:transparent;color:var(--text3);
}
#musicListPop .mp-library-tools .mp-sortbtn:hover{
    color:var(--accent);background:color-mix(in srgb,var(--accent) 11%,transparent);
}


/* 17.5 · 홈 정보 구조: 동작 버튼은 sticky 헤더 아래에 항상 보이고,
   노트 더미와 최근 편집 목록은 같은 폭·간격의 두 구역으로 정렬한다. */
.home-stack-area{gap:0;padding:0 0 24px!important;}
.home-stack-upper{max-width:960px;z-index:1;}
.home-add-zone,
.home-stack-area.has-recent .home-add-zone{
    width:min(100%,800px);height:auto;min-height:58px;padding:4px 18px 10px;
    display:flex;align-items:center;justify-content:space-between;gap:16px;
    position:relative;z-index:2;
}
.home-section-title{
    margin:0;display:flex;align-items:center;gap:8px;color:var(--text1);
    font-size:15px;font-weight:850;letter-spacing:-.02em;line-height:1.2;
}
.home-section-title i{color:var(--accent);font-size:17px;}
.home-add-note{z-index:2;flex:none;}
.home-stack-area.has-recent .stack-scene,
.home-stack-area.has-recent .recent-section{
    height:calc(var(--home-rows-h,560px) / 2);min-height:140px;
}
.home-stack-area.has-recent .stack-scene{padding:4px 18px 12px!important;}
.home-stack-area.has-recent .recent-section{
    display:flex;flex-direction:column;align-items:center;overflow:visible;
    position:relative;z-index:1;padding:10px 0 0!important;margin:0!important;
    border-top:0!important;
}
.recent-section > .recent-title{
    display:block!important;width:min(100%,800px);padding:0 18px 7px;box-sizing:border-box;
    color:var(--text2);font-size:13px;
}
.home-stack-area.has-recent .recent-row{
    flex:1 1 auto;width:max-content;max-width:calc(100vw - 28px);height:auto;
    align-items:flex-start;padding:4px 16px 38px!important;margin:0 auto!important;
    overflow-x:auto;overflow-y:visible;position:relative;z-index:1;
}
@media(max-width:640px){
    .home-add-zone,.home-stack-area.has-recent .home-add-zone{padding:2px 8px 8px;min-height:54px;}
    .home-section-title{font-size:14px;}
    .recent-section > .recent-title{padding-left:12px;padding-right:12px;}
    .home-stack-area.has-recent .recent-row{max-width:calc(100vw - 8px);padding:4px 10px 30px!important;}
}

/* 17.6 · 최근 줄의 세로 잘림·스크롤바 제거
   가로 스크롤 상자(overflow-x:auto)에서는 overflow-y:visible 이 auto 로
   계산되므로, 카드+아래 그림자(52px 가량)가 줄 높이만 넘어도 세로 스크롤바가
   생기고 카드 아래가 딱 잘린다. 그래서 줄 높이를 아래로 내리고 그만큼 음수
   마진으로 흐름 높이는 그대로 둔다(화면 맞춤 레이아웃에 영향 없음).
   줄 높이의 정확한 값(--home-row-h)은 JS 가 제목·패딩·마진을 재서 넣는다.

   17.7 · 카드 '옆' 그림자 잘림까지 함께 없앴다.
   호버 그림자는 0 34px 60px -14px + scale(1.015) + translateY(-6px) 라
   카드 기준으로 위 8px · 좌우 18px · 아래 42px 까지 번진다. 좌우 여유는
   넉넉한 2배(데스크톱 34→68 · 모바일 22→44)로 두어 스크롤 상자의 양끝에서도
   카드 그림자가 잘리지 않게 한다. 위 패딩·음수 마진은 그대로 두어 카드 자리·두 줄
   레이아웃·아래 오버플로(60px)는 바꾸지 않는다. 줄 높이(--home-row-h)는 이
   패딩·마진을 JS 가 직접 읽어서 계산한다. */
.home-stack-area.has-recent .recent-row{
    height:var(--home-row-h,auto);
    box-sizing:border-box;
    padding:18px 68px 56px!important;
    margin:-14px auto -60px!important;
    overflow-x:auto;overflow-y:hidden;
}
@media(max-width:640px){
    .home-stack-area.has-recent .recent-row{padding:18px 44px 56px!important;}
}
/* 두 줄이 화면 높이에 정확히 들어맞는 홈은 min-height 가 몇 px 을 더
   붙여 세로 스크롤·아래 잘림을 만들지 않게 한다. */
#mainView:has(.home-stack-area.has-recent) main{min-height:0!important;}
/* ═══════════════════════════════════════════════════════════
   15.2 · 암기 카드 대개편 — 영롱한 글래스모피즘 + 도트 모티프 + 초귀요미 해달 '해동이'
   ─────────────────────────────────────────────────────────────
   · 투명하고 은은한 유리(Glassmorphism) 질감 + 배경 도트 패턴의 조화
   · 손 위치·불가사리·수영하는 모습까지 완벽하게 완성된 초귀요미 해달 캐릭터
   · 학습 상태(정답/오답/생각/칭찬)에 따라 살아 움직이는 표정·소품·파티클
   · 전체화면(fcard-max): 히어로 헤더, 그리드 덱 목록, 오로라 무대, 꽉 찬 뷰포트
   ═══════════════════════════════════════════════════════════ */

/* ── 1. 창 프레임 — 글래스모피즘 & 도트 텍스처 ── */
.fcard-win{
  /* 가독성: 유리 질감은 유지하되 배경 투명도를 낮춰 글자가 잘 읽히게 한다. */
  background:linear-gradient(135deg,rgba(255,255,255,.985) 0%,rgba(247,249,255,.975) 50%,rgba(255,247,252,.975) 100%) !important;
  backdrop-filter:blur(28px) saturate(180%) !important;
  -webkit-backdrop-filter:blur(28px) saturate(180%) !important;
  background-image:
    radial-gradient(circle,rgba(120,135,215,.13) 1.2px,transparent 1.2px),
    linear-gradient(135deg,rgba(255,255,255,.985) 0%,rgba(247,249,255,.975) 50%,rgba(255,247,252,.975) 100%) !important;
  background-size:22px 22px,100% 100% !important;
  border:1px solid rgba(255,255,255,.75) !important;
  border-radius:24px !important;
  box-shadow:0 4px 16px rgba(15,23,42,.04),
             0 32px 84px -16px rgba(90,100,170,.22),
             inset 0 1px 0 rgba(255,255,255,.95) !important;
}
.dark .fcard-win:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(26,28,42,.985) 0%,rgba(20,22,36,.975) 50%,rgba(32,26,42,.975) 100%) !important;
  backdrop-filter:blur(28px) saturate(180%) !important;
  -webkit-backdrop-filter:blur(28px) saturate(180%) !important;
  background-image:
    radial-gradient(circle,rgba(255,255,255,.07) 1.2px,transparent 1.2px),
    linear-gradient(135deg,rgba(26,28,42,.985) 0%,rgba(20,22,36,.975) 50%,rgba(32,26,42,.975) 100%) !important;
  background-size:22px 22px,100% 100% !important;
  border-color:rgba(255,255,255,.12) !important;
  box-shadow:0 4px 16px rgba(0,0,0,.4),
             0 36px 96px rgba(0,0,0,.75),
             inset 0 1px 0 rgba(255,255,255,.09) !important;
}

/* 확장 모핑 애니메이션 */
.fcard-win.fcard-anim{transition:left .52s cubic-bezier(.2,.9,.3,1),top .52s cubic-bezier(.2,.9,.3,1),width .52s cubic-bezier(.2,.9,.3,1),height .52s cubic-bezier(.2,.9,.3,1) !important;}

/* 상단 헤더 */
.fcard-head{
  background:linear-gradient(180deg,rgba(255,255,255,.94) 0%,rgba(242,246,255,.9) 100%) !important;
  backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);
  border-bottom:1px solid rgba(255,255,255,.6) !important;
  padding:10px 18px;min-height:48px;border-radius:24px 24px 0 0;
}
.dark .fcard-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,rgba(32,34,52,.92) 0%,rgba(24,26,42,.85) 100%) !important;
  border-bottom-color:rgba(255,255,255,.09) !important;
}
.fcard-head>b{font-weight:800;letter-spacing:-.02em;color:var(--text1);font-size:14.5px;}

/* ── 2. 전체화면 (fcard-max): 빈틈없이 꽉 차고 풍성한 뷰 ── */
.fcard-win.fcard-max{
  left:0!important;top:0!important;
  width:var(--fcard-max-w,calc(100vw))!important;
  height:var(--fcard-max-h,calc(100dvh))!important;
  /* 기본 .fcard-win 의 760px 폭 · 92vh 높이 캡이 살아 있으면 실측 --fcard-max-w/h 를
     넣어도 렌더 크기가 760px×92vh 로 잘려 화면에 꽉 차지 않고 좌상단에 갇힌다.
     창이 좌상단에 갇히면 학습 통계(statrow)도 화면 기준 왼쪽에 치우쳐 보인다.
     아래 폰 블록과 같은 캡 해제 — 데스크톱 블록에만 빠져 있었다 */
  max-width:none !important;max-height:none !important;transform:none !important;
  border-radius:0 !important;border:none !important;
  background:
    radial-gradient(circle at 8% 12%,rgba(99,102,241,.12),transparent 36%),
    radial-gradient(circle at 92% 88%,rgba(236,72,153,.10),transparent 40%),
    radial-gradient(circle at 85% 15%,rgba(56,189,248,.10),transparent 35%),
    linear-gradient(180deg,rgba(248,250,255,.985),rgba(240,244,252,.98)) !important;
  background-image:
    radial-gradient(circle,rgba(120,135,215,.13) 1.2px,transparent 1.2px),
    radial-gradient(circle at 8% 12%,rgba(99,102,241,.12),transparent 36%),
    radial-gradient(circle at 92% 88%,rgba(236,72,153,.10),transparent 40%),
    radial-gradient(circle at 85% 15%,rgba(56,189,248,.10),transparent 35%),
    linear-gradient(180deg,rgba(248,250,255,.985),rgba(240,244,252,.98)) !important;
  background-size:24px 24px,100% 100%,100% 100%,100% 100%,100% 100% !important;
}
.dark .fcard-win.fcard-max:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:
    radial-gradient(circle at 8% 12%,rgba(99,102,241,.16),transparent 36%),
    radial-gradient(circle at 92% 88%,rgba(236,72,153,.13),transparent 40%),
    radial-gradient(circle at 85% 15%,rgba(56,189,248,.12),transparent 35%),
    linear-gradient(180deg,#12141d,#0d0f16) !important;
  background-image:
    radial-gradient(circle,rgba(255,255,255,.07) 1.2px,transparent 1.2px),
    radial-gradient(circle at 8% 12%,rgba(99,102,241,.16),transparent 36%),
    radial-gradient(circle at 92% 88%,rgba(236,72,153,.13),transparent 40%),
    radial-gradient(circle at 85% 15%,rgba(56,189,248,.12),transparent 35%),
    linear-gradient(180deg,#12141d,#0d0f16) !important;
  background-size:24px 24px,100% 100%,100% 100%,100% 100%,100% 100% !important;
}
.fcard-win.fcard-max .fcard-head{
  position:sticky;top:0;z-index:30;border-radius:0;
  background:rgba(255,255,255,.94) !important;
  backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);
  border-bottom:1px solid rgba(255,255,255,.65) !important;
}
.dark .fcard-win.fcard-max .fcard-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(22,24,36,.92) !important;
  border-bottom-color:rgba(255,255,255,.09) !important;
}
.fcard-win.fcard-max #cardsHome,.fcard-win.fcard-max #cardsStudy,
.fcard-win.fcard-max #cardsPaste,.fcard-win.fcard-max #cardsStats,
.fcard-win.fcard-max #cardsAnalytics,.fcard-win.fcard-max #cardsBrowse{
  max-width:1200px;margin:0 auto;width:100%;
  padding:28px 36px 40px;box-sizing:border-box;
}

/* ── 3. 홈 히어로 배너 — 전체화면의 허전함 완벽 해소 ── */
.fcard-win:not(.fcard-max) .cd-hero{display:none;}
.cd-hero{
  display:flex;align-items:center;gap:28px;
  padding:24px 32px;margin-bottom:24px;
  background:linear-gradient(135deg,rgba(255,255,255,.95) 0%,rgba(240,245,255,.9) 100%);
  backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);
  border:1.5px solid rgba(255,255,255,.8);
  border-radius:24px;
  box-shadow:0 12px 36px -8px rgba(90,100,180,.15),inset 0 1px 0 rgba(255,255,255,.95);
  position:relative;overflow:hidden;
}
.dark .cd-hero:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(32,35,54,.96) 0%,rgba(24,26,42,.92) 100%);
  border-color:rgba(255,255,255,.12);
  box-shadow:0 12px 36px -8px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.08);
}
.cd-hero-otter{
  /* 18.1 · 새 해돌이(정사각 200x200) — 배너가 답답하지 않게 높이 살짝 줄임 */
  flex:0 0 auto;width:auto;height:132px;overflow:visible;
  filter:drop-shadow(0 10px 20px rgba(60,35,20,.18));
}
.cd-hero-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;}
.cd-hero-txt b{font-size:clamp(17px,1.6vw,22px);font-weight:900;color:var(--text1);letter-spacing:-.02em;}
.cd-hero-txt span{font-size:13.5px;color:var(--text2);line-height:1.55;}
.cd-hero-tags{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap;}
.cd-hero-tag{
  display:inline-flex;align-items:center;gap:5px;
  font-size:11.5px;font-weight:700;color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,rgba(255,255,255,.75));
  backdrop-filter:blur(8px);
  padding:4px 12px;border-radius:99px;
  border:1px solid color-mix(in srgb,var(--accent) 25%,rgba(255,255,255,.8));
}
.dark .cd-hero-tag:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 18%,rgba(30,32,48,.8));
  border-color:color-mix(in srgb,var(--accent) 30%,rgba(255,255,255,.1));
}
.cd-hero-glow{
  position:absolute;right:-40px;bottom:-40px;width:160px;height:160px;
  background:radial-gradient(circle,rgba(99,102,241,.2),transparent 70%);
  pointer-events:none;filter:blur(18px);
}

/* 홈 팁 바 */
.fcard-win:not(.fcard-max) .cd-home-tips{display:none;}
.cd-home-tips{
  display:grid;grid-template-columns:1fr 1fr;gap:14px;
  margin-top:24px;padding-top:18px;border-top:1px dashed rgba(120,135,215,.25);
}
.cd-tip-item{
  display:flex;align-items:center;gap:10px;padding:12px 16px;border-radius:16px;
  background:rgba(255,255,255,.6);backdrop-filter:blur(12px);
  border:1px solid rgba(255,255,255,.65);
  font-size:12px;color:var(--text2);
}
.dark .cd-tip-item:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(28,30,46,.6);border-color:rgba(255,255,255,.08);color:var(--text3);}
.cd-tip-item i{font-size:18px;color:var(--accent);flex:none;}
.cd-tip-item b{color:var(--text1);font-weight:800;}

/* 홈 카드 묶음 그리드 */
.fcard-win.fcard-max .cards-list{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));
  gap:14px;align-content:start;margin-top:10px;
}
.fcard-win.fcard-max .cd-deck{
  padding:16px 18px;border-radius:20px;
  background:linear-gradient(135deg,rgba(255,255,255,.86) 0%,rgba(244,247,255,.72) 100%);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  border:1.5px solid rgba(255,255,255,.8);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 8px 24px -6px rgba(90,100,180,.08);
  transition:transform .18s cubic-bezier(.2,.8,.3,1.2),box-shadow .18s ease,border-color .18s ease;
}
.dark .fcard-win.fcard-max .cd-deck:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(36,38,56,.9) 0%,rgba(28,30,46,.8) 100%);
  border-color:rgba(255,255,255,.1);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 8px 24px -6px rgba(0,0,0,.4);
}
.fcard-win.fcard-max .cd-deck:hover{
  transform:translateY(-3px) scale(1.01);
  border-color:rgba(99,102,241,.5);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 16px 36px -8px rgba(99,102,241,.2);
}
.fcard-win .cd-ring{
  width:44px;height:44px;flex:none;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;color:var(--accent);
  box-shadow:0 4px 12px rgba(99,102,241,.18);
}
.fcard-win .cd-deck .t b{font-size:14.5px;font-weight:800;}
.fcard-win .cd-deck .t span{font-size:12px;color:var(--text3);margin-top:2px;display:block;}

/* ── 4. 해달 '해동이' Stage & 애니메이션 (Gemini 귀요미 해달) ── */
.fcard-win #cardsStudy{flex:1 1 auto;min-height:0;}
.fcard-win:not(.fcard-max) #cardsStudy,
.fcard-win.fcard-max #cardsStudy{display:flex;flex-direction:column;}
.cd-stage{display:block;position:relative;}
.fcard-win:not(.fcard-max) .cd-stage{
  display:flex;flex-direction:column;align-items:center;
  gap:14px;min-height:0;width:100%;position:relative;flex:1 1 auto;
}
.cd-otter{display:none;}
.fcard-win.fcard-max .cd-stage{
  flex:1 1 auto;display:flex;align-items:center;justify-content:center;
  gap:clamp(14px,2vw,34px);
  min-height:0;width:100%;position:relative;
}
.fcard-win.fcard-max .cd-stage::before{
  content:'';position:absolute;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(40% 55% at 18% 88%,rgba(126,202,232,.24),transparent 70%),
    radial-gradient(42% 50% at 88% 20%,rgba(139,92,246,.18),transparent 70%),
    radial-gradient(32% 40% at 65% 90%,rgba(99,102,241,.16),transparent 70%);
  filter:blur(8px);border-radius:24px;
}
.fcard-win.fcard-max .cd-cardzone{
  flex:1 1 auto;max-width:760px;width:100%;
  display:flex;flex-direction:column;align-items:center;
  position:relative;z-index:2;
}
.fcard-win.fcard-max .cd-otter{
  /* 18.3 · 말해보카 캐릭터처럼 문제 카드 왼쪽에 딱 붙어 나란히 (세로 가운데).
     화면 가장자리가 아니라 카드 옆이라서 간격이 항상 일정하다. */
  display:block;position:relative;top:auto;bottom:auto;transform:none;
  flex:0 0 auto;
  width:clamp(118px,13vw,164px);height:auto;
  z-index:3;pointer-events:none;
}
/* 확장(비-전체화면) 암기카드에서도 카드 아래쪽에 해돌이를 보여 준다. */
.fcard-win:not(.fcard-max) .cd-cardzone{order:1;width:100%;min-width:0;}
.fcard-win:not(.fcard-max) .cd-otter{
  order:2;display:block;position:relative;flex:0 0 auto;margin-top:auto;
  width:clamp(84px,11vw,118px);height:auto;
  z-index:3;pointer-events:none;
}
.cd-otter-svg{display:block;width:100%;height:auto;overflow:visible;
  filter:drop-shadow(0 12px 24px rgba(60,35,20,.2));}
.dark .cd-otter-svg:not(:where(.sdy-editor-light,.sdy-editor-light *)){filter:drop-shadow(0 12px 24px rgba(0,0,0,.6));}


/* 말풍선 */
.otter-bubble{
  position:absolute;left:0;right:0;margin:0 auto;bottom:calc(100% + 10px);
  width:max-content;max-width:240px;
  background:rgba(255,255,255,.94);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  border:1.5px solid color-mix(in srgb,var(--accent) 35%,rgba(255,255,255,.8));
  color:var(--text1);padding:10px 15px;border-radius:18px;
  font-size:13px;font-weight:700;line-height:1.4;
  box-shadow:0 12px 28px -6px rgba(90,80,160,.22),inset 0 1px 0 rgba(255,255,255,.9);
  opacity:0;transform:translateY(6px) scale(.8);transform-origin:50% 100%;
  pointer-events:none;transition:opacity .25s,transform .25s cubic-bezier(.2,.9,.3,1.3);
  white-space:pre-wrap;word-break:keep-all;z-index:3;
}
.dark .otter-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(28,30,46,.92);border-color:rgba(107,127,247,.45);color:#f0f2ff;
  box-shadow:0 12px 30px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.08);
}
.otter-bubble.show{opacity:1;transform:translateY(0) scale(1);}
.otter-bubble::after{
  content:'';position:absolute;left:50%;margin-left:-9px;bottom:-9px;
  border:9px solid transparent;border-top-color:rgba(255,255,255,.94);border-bottom:0;
}
.dark .otter-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{border-top-color:rgba(28,30,46,.92);}

/* 18.1 · 노트/노래 해돌이용 작은 말풍선 — 해돌이 머리 위, 왼쪽 정렬로 오른쪽으로 뻗는다 */
.otter-bubble-mini{
  left:0;right:auto;margin:0;bottom:calc(100% + 6px);
  width:max-content;max-width:190px;
  padding:7px 11px;font-size:12px;line-height:1.35;border-radius:14px;
  transform-origin:20% 100%;
}
.otter-bubble-mini::after{
  left:18px;margin-left:0;bottom:-8px;border-width:8px;
}
/* 노래 해돌이는 컨트롤바 왼쪽에 붙어 있으므로 말풍선은 왼쪽으로 뻗게 뒤집는다 */
.mp-otter .otter-bubble-mini{
  left:auto;right:0;transform-origin:80% 100%;
}
.mp-otter .otter-bubble-mini::after{
  left:auto;right:18px;margin-left:0;
}

/* 파티클 효과 */
.otter-fx{position:absolute;inset:0;pointer-events:none;overflow:visible;z-index:4;}
.otter-fx .p{position:absolute;left:50%;top:30%;font-size:20px;
  transform:translate(-50%,-50%);animation:otterFx .9s cubic-bezier(.2,.8,.2,1) forwards;}
@keyframes otterFx{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.4) rotate(0);}
  30%{opacity:1;transform:translate(calc(-50% + var(--px,0px)*.4),calc(-50% + var(--py,-40px)*.4)) scale(1.3) rotate(var(--pr,0deg));}
  100%{opacity:0;transform:translate(calc(-50% + var(--px,0px)),calc(-50% + var(--py,-40px))) scale(.8) rotate(var(--pr,0deg));}
}

/* ── 5. 학습 화면 구성 요소 — 영롱한 글래스 카드 ── */
/* 문제 상단 바 */
.cd-qbar{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;width:100%;}
.cd-qchip{font-size:11px;font-weight:800;letter-spacing:.05em;color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,rgba(255,255,255,.8));
  backdrop-filter:blur(8px);
  border:1px solid color-mix(in srgb,var(--accent) 30%,rgba(255,255,255,.8));
  padding:4px 14px;border-radius:99px;flex:none;
  box-shadow:0 2px 8px rgba(99,102,241,.12);}
.dark .cd-qchip:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:color-mix(in srgb,var(--accent) 20%,rgba(30,32,48,.8));border-color:color-mix(in srgb,var(--accent) 35%,rgba(255,255,255,.1));}
.cd-qtitle{margin:0;font-size:clamp(20px,1.9vw,26px);font-weight:800;letter-spacing:-.02em;
  line-height:1.45;max-width:760px;color:var(--text1);white-space:pre-wrap;word-break:keep-all;}
.fcard-win.fcard-max .cd-qbar{gap:12px;}
.fcard-win.fcard-max .cd-qtitle{font-size:clamp(24px,2.2vw,36px);max-width:860px;}
.cd-qbar.cd-qin .cd-qchip,.cd-qbar.cd-qin .cd-qtitle{
  animation:cdQIn .32s cubic-bezier(.2,.8,.3,1.1);}
@keyframes cdQIn{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:none;}}

/* 뒤집기 카드 & 패널 */
.cd-qq{
  background:linear-gradient(135deg,rgba(255,255,255,.88) 0%,rgba(244,248,255,.75) 100%);
  backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);
  border:1.5px solid rgba(255,255,255,.8);border-radius:22px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 12px 32px -6px rgba(90,100,180,.12);
}
.dark .cd-qq:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(34,36,54,.9) 0%,rgba(26,28,44,.8) 100%);
  border-color:rgba(255,255,255,.1);box-shadow:0 12px 32px -6px rgba(0,0,0,.5);
}
.fcard-win.fcard-max .cd-inner{height:clamp(260px,36dvh,400px);max-width:720px;}
.fcard-win.fcard-max .cd-face{
  border-radius:22px;padding:32px 36px;
  background:linear-gradient(135deg,rgba(255,255,255,.9) 0%,rgba(244,248,255,.76) 100%);
  backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  border:1.5px solid rgba(255,255,255,.8);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 12px 36px -8px rgba(90,100,180,.12);
}
.dark .fcard-win.fcard-max .cd-face:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(34,36,54,.92) 0%,rgba(26,28,44,.82) 100%);
  border-color:rgba(255,255,255,.1);
}
.fcard-win.fcard-max .cd-txt{font-size:clamp(19px,2.1vw,28px);font-weight:800;line-height:1.65;}

/* 답 보기(Reveal) 패널 */
.cd-reveal{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:10px;text-align:center;padding:36px 24px;border-radius:20px;
  border:2px dashed color-mix(in srgb,var(--accent) 35%,rgba(255,255,255,.6));
  background:linear-gradient(135deg,rgba(255,255,255,.55) 0%,color-mix(in srgb,var(--accent) 6%,rgba(255,255,255,.45)) 100%);
  cursor:pointer;transition:all .18s cubic-bezier(.2,.8,.3,1.2);
}
.dark .cd-reveal:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(28,30,46,.6);border-color:rgba(99,102,241,.3);
}
.cd-reveal:hover{
  transform:translateY(-2px);
  border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 12%,rgba(255,255,255,.8));
  box-shadow:0 8px 24px -4px rgba(99,102,241,.2);
}
.cd-reveal i{font-size:32px;color:var(--accent);animation:revealPulse 2.4s ease-in-out infinite;}
@keyframes revealPulse{0%,100%{transform:scale(1);}50%{transform:scale(1.12);}}
.cd-reveal b{font-size:16px;font-weight:900;color:var(--text1);}
.cd-reveal span{font-size:12.5px;color:var(--text3);}
.fcard-win.fcard-max .cd-reveal i{font-size:38px;}
.fcard-win.fcard-max .cd-reveal b{font-size:18px;}

/* 객관식 보기 리스트 */
.fcard-win.fcard-max .cd-opts{
  display:grid;grid-template-columns:1fr 1fr;gap:12px;
  margin-top:20px;width:100%;max-width:760px;
}
.fcard-win .cd-opt{
  border:1.5px solid rgba(255,255,255,.75);
  border-radius:16px;padding:15px 18px;
  background:linear-gradient(135deg,rgba(255,255,255,.86) 0%,rgba(244,248,255,.72) 100%);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 4px 14px rgba(90,100,180,.06);
  font-weight:700;font-size:14px;color:var(--text1);
  display:flex;align-items:center;gap:12px;
  cursor:pointer;transition:transform .12s ease,border-color .15s,box-shadow .15s,background .15s;
}
.dark .fcard-win .cd-opt:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(34,36,54,.9) 0%,rgba(26,28,44,.8) 100%);
  border-color:rgba(255,255,255,.1);
}
.fcard-win .cd-opt:hover{
  border-color:var(--accent);transform:translateY(-2px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 8px 20px -4px rgba(99,102,241,.2);
}
.fcard-win .cd-opt:active{transform:translateY(1px);}
.fcard-win .cd-opt i.num{
  width:26px;height:26px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--accent) 15%,rgba(255,255,255,.8));
  color:var(--accent);font-size:12px;font-weight:900;flex:none;
}
.fcard-win .cd-opt.ok{
  background:linear-gradient(135deg,#58cc02,#46a302) !important;
  border-color:#3a8a00 !important;color:#fff !important;
  box-shadow:0 8px 24px -4px rgba(88,204,2,.35) !important;
}
.fcard-win .cd-opt.ok i.num{background:rgba(255,255,255,.25);color:#fff;}
.fcard-win .cd-opt.no{
  background:linear-gradient(135deg,#ff4b4b,#ea2b2b) !important;
  border-color:#c81a1a !important;color:#fff !important;
  box-shadow:0 8px 24px -4px rgba(255,75,75,.35) !important;
}
.fcard-win .cd-opt.no i.num{background:rgba(255,255,255,.25);color:#fff;}
.fcard-win .cd-opt.pick{
  background:color-mix(in srgb,var(--accent) 18%,rgba(255,255,255,.88)) !important;
  border-color:var(--accent) !important;
}

/* 진행바 */
.fcard-win .cd-prog{
  height:10px;border-radius:99px;
  background:rgba(255,255,255,.6);
  backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.65);
  box-shadow:inset 0 1px 3px rgba(90,100,160,.12);
  overflow:hidden;flex:1;
}
.dark .fcard-win .cd-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(30,32,48,.6);border-color:rgba(255,255,255,.08);}
.fcard-win #cdProgFill{
  height:100%;border-radius:99px;
  background:linear-gradient(90deg,#6366f1,#8b5cf6 55%,#ec4899);
  box-shadow:0 0 12px rgba(139,92,246,.5);
  transition:width .28s cubic-bezier(.2,.8,.3,1.2);
}

/* 세션 칩 & 키보드 안내 (확장 모드 전용) */
.fcard-win.fcard-max #cardsStudy .cd-sess{display:inline-flex;}
.fcard-win.fcard-max #cardsStudy .cd-sess{align-items:center;gap:6px;}
.fcard-win .cd-chip{
  background:rgba(255,255,255,.75);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border:1px solid rgba(255,255,255,.65);
  padding:4px 11px;border-radius:99px;font-size:11.5px;font-weight:700;color:var(--text2);
}
.dark .fcard-win .cd-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(32,34,52,.7);border-color:rgba(255,255,255,.09);color:var(--text3);}

.cd-keyhints{display:none;}
.fcard-win.fcard-max .cd-keyhints{
  display:flex;justify-content:center;align-items:center;
  gap:8px 18px;flex-wrap:wrap;margin-top:24px;padding-top:16px;
  border-top:1px dashed rgba(120,135,215,.25);color:var(--text3);font-size:11.5px;font-weight:600;
}
.cd-keyhints b{
  display:inline-block;padding:3px 8px;margin-right:4px;
  border:1px solid rgba(255,255,255,.8);border-bottom-width:2px;border-radius:6px;
  background:rgba(255,255,255,.7);color:var(--text1);font-size:11px;font-weight:800;
}
.dark .cd-keyhints b:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(32,34,52,.7);border-color:rgba(255,255,255,.1);color:var(--text2);}

/* 학습 방식 6칸 타일 */
.fcard-win.fcard-max .fc-modes{grid-template-columns:repeat(6,1fr);gap:12px;max-width:1080px;margin:12px auto 0;}
.fcard-win .fc-mode{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  padding:20px 10px;text-align:center;border-radius:18px;
  background:linear-gradient(135deg,rgba(255,255,255,.86) 0%,rgba(244,248,255,.72) 100%);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  border:1.5px solid rgba(255,255,255,.8);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 8px 22px -6px rgba(90,100,180,.08);
  cursor:pointer;transition:transform .15s cubic-bezier(.2,.8,.3,1.2),border-color .15s,box-shadow .15s;
}
.dark .fcard-win .fc-mode:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(36,38,56,.9) 0%,rgba(28,30,46,.8) 100%);
  border-color:rgba(255,255,255,.1);
}
.fcard-win .fc-mode:hover{
  transform:translateY(-3px) scale(1.02);
  border-color:var(--accent);
  box-shadow:0 12px 28px -6px rgba(99,102,241,.25);
}
.fcard-win .fc-mode i{font-size:26px;color:var(--accent);}
.fcard-win .fc-mode b{font-size:13px;font-weight:800;color:var(--text1);}

/* 통계 & 타일 */
.fcard-win .cd-stat{
  border-radius:18px;padding:16px 8px;
  background:linear-gradient(135deg,rgba(255,255,255,.9) 0%,color-mix(in srgb,var(--accent) 8%,rgba(255,255,255,.8)) 100%);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border:1.5px solid rgba(255,255,255,.75);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 6px 18px -4px rgba(90,100,170,.08);
}
.dark .fcard-win .cd-stat:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(36,38,54,.92),rgba(28,30,44,.82));
  border-color:rgba(255,255,255,.08);
}
.fcard-win.fcard-max .cd-statrow{max-width:680px;margin:0 auto 22px;}

/* 공통 버튼 */
.fcard-win .cd-btn{
  border:1.5px solid rgba(255,255,255,.75);border-radius:16px;
  background:linear-gradient(135deg,rgba(255,255,255,.88) 0%,rgba(244,248,255,.76) 100%);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  padding:12px 20px;font-weight:800;color:var(--text1);font-size:13.5px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 4px 14px rgba(90,100,180,.08);
  cursor:pointer;transition:transform .12s,box-shadow .15s,border-color .15s;
}
.dark .fcard-win .cd-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(36,38,56,.9),rgba(28,30,46,.8));
  border-color:rgba(255,255,255,.1);
}
.fcard-win .cd-btn:hover{transform:translateY(-1.5px);border-color:var(--accent);box-shadow:0 8px 22px -4px rgba(99,102,241,.25);}
.fcard-win .cd-btn:active{transform:translateY(1px);}
.fcard-win .cd-btn.primary{
  background:linear-gradient(135deg,#6366f1,#8b5cf6 60%,#a855f7) !important;
  border-color:rgba(255,255,255,.4) !important;color:#fff !important;
  box-shadow:0 8px 24px -4px rgba(99,102,241,.4) !important;
}

/* 짝 맞추기: 넓어진 판에 4열 */
.fcard-win.fcard-max .cd-match{max-width:840px;}
.fcard-win.fcard-max .cd-mgrid{grid-template-columns:repeat(4,1fr);gap:12px;}
.fcard-win.fcard-max .cd-tile{min-height:100px;font-size:14px;padding:14px;border-radius:18px;
  background:linear-gradient(135deg,rgba(255,255,255,.88),rgba(238,241,255,.75));
  backdrop-filter:blur(14px);border:1.5px solid rgba(255,255,255,.75);}
.dark .fcard-win.fcard-max .cd-tile:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(36,38,54,.92),rgba(28,30,44,.82));border-color:rgba(255,255,255,.08);}
.fcard-win .cd-tile.pick{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 18%,rgba(255,255,255,.88));}

/* 해설 */
.fcard-win .cd-explain,.fcard-win .cd-note{white-space:normal;}
.fcard-win .ex-lead{font-weight:700;color:var(--text1);}
.fcard-win .ex-item{margin-top:8px;padding:9px 14px;border-radius:14px;
  display:flex;align-items:flex-start;gap:10px;
  background:color-mix(in srgb,var(--card) 75%,rgba(255,255,255,.6));
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  border:1px dashed color-mix(in srgb,var(--accent) 30%,rgba(255,255,255,.6));
  font-size:.95em;color:var(--text2);line-height:1.65;}
.fcard-win .ex-n{flex:none;width:22px;height:22px;margin-top:1px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--accent) 15%,rgba(255,255,255,.8));color:var(--accent);
  font-size:11px;font-weight:800;font-style:normal;}
.fcard-win .ex-item.ex-right{background:color-mix(in srgb,#5ecf95 16%,rgba(255,255,255,.7));
  border-color:color-mix(in srgb,#5ecf95 60%,transparent);}
.fcard-win .ex-item.ex-right .ex-n{background:#5ecf95;color:#fff;}
.fcard-win .ex-item.ex-wrong{border-color:color-mix(in srgb,#ef7d96 42%,transparent);}
.fcard-win .ex-item.ex-wrong .ex-n{background:#ffe4ea;color:#bb3f5c;}
.fcard-win .cd-explain .ex-lead:first-child{margin-top:2px;}

/* 연속 정답 배지 */
.fcard-win .cd-streak{
  background:linear-gradient(135deg,rgba(255,217,168,.9),rgba(255,190,130,.8));
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border-radius:99px;padding:4px 12px;color:#8a5a1d;font-weight:800;
  box-shadow:0 3px 10px rgba(255,170,80,.25);border:none;
}
.dark .fcard-win .cd-streak:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:color-mix(in srgb,#f59e0b 26%,var(--bg2));color:#ffd9a8;}

/* 상단 뒤로가기 버튼 */
.fcard-win .cd-back{
  border-radius:12px;background:color-mix(in srgb,var(--accent) 10%,rgba(255,255,255,.7));
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border:1px solid rgba(255,255,255,.6);
  color:var(--text2);transition:background .15s,color .15s,transform .15s;
}
.fcard-win .cd-back:hover{background:color-mix(in srgb,var(--accent) 20%,rgba(255,255,255,.9));color:var(--accent);transform:scale(1.05);}

/* 중간 폭 반응형 */
@media (max-width:1100px){
  .fcard-win.fcard-max .fc-modes{grid-template-columns:repeat(3,1fr);}
  .fcard-win.fcard-max .cd-mgrid{grid-template-columns:repeat(3,1fr);}
  /* 해돌이를 살짝 줄여 카드가 좁아지지 않게 */
  .fcard-win.fcard-max .cd-stage{gap:clamp(10px,1.6vw,22px);}
  .fcard-win.fcard-max .cd-otter{width:clamp(96px,11vw,128px);}
}

/* 움직임 줄이기 */
@media (prefers-reduced-motion:reduce){
  .fcard-win.fcard-anim{transition:none !important;}
  .cd-otter *,.cd-hero-otter *{animation:none !important;}
  .otter-fx .p{display:none !important;}
}


/* ═══════════════════════════════════════════════════════════
   18.0 · 해돌이 — 초귀요미 해달 마스코트 (CodePen 원본 그대로)
   · 노래 해달(.mp-otter, svg.om-music) : 하단 음악 컨트롤바 위
   · 노트 해달(.note-otter, svg.om-doc) : 노트 편집기 왼쪽 아래
     → 누르면 om-idea(전구)로 잠깐 변신했다가 돌아온다 (sdynotes.js)
   상태 클래스(svg.om-*)가 소품·표정·애니메이션을 갈아끼운다.
   om-correct/om-wrong 도 마스코트 공통으로 쓸 수 있게 남겨 둔다.
   ═══════════════════════════════════════════════════════════ */

/* ── 자리 잡기 ── */
/* 노래 해돌이는 하단 음악 컨트롤바 바로 왼쪽에 수직 중심을 맞춰 앉힌다. */
.mp-otter{position:absolute;left:auto;right:calc(100% + 10px);top:50%;bottom:auto;margin-top:-41px;width:82px;height:82px;
  pointer-events:auto;cursor:pointer;filter:drop-shadow(0 3px 8px rgba(0,0,0,.16));}
/* 19.0 · 플로팅 음반 모드(노트 편집 중)엔 하단 크로스바가 아예 뜨지 않는다 —
   해돌이는 크로스바에 올라 있으니 홈에서만 나온다 */
.mp-otter:focus-visible{outline:2px dashed var(--accent);outline-offset:4px;border-radius:16px;}
.mp-otter:hover svg{transform:translateY(-2px) scale(1.04);}
.mp-otter:active svg{transform:scale(.94);}
/* 18.5 · 따라 부르기 켜짐(클릭 토글) — 흥얼흥얼 들썩인다 */
.mp-otter.singing svg{animation:mpOtterSing 1.1s ease-in-out infinite;}
@keyframes mpOtterSing{
  0%,100%{transform:translateY(0) rotate(-2deg);}
  50%{transform:translateY(-3px) rotate(2.5deg);}
}
@media (prefers-reduced-motion: reduce){ .mp-otter.singing svg{animation:none;} }
.note-otter{position:absolute;left:30px;bottom:10px;width:98px;height:98px;z-index:6;
  cursor:pointer;filter:drop-shadow(0 3px 8px rgba(0,0,0,.14));
  transition:bottom .3s cubic-bezier(.22,.9,.3,1.12);}
.note-otter.draw-on{bottom:10px;}   /* 그리기 막대는 페이지 위 — 해돌이는 아래에 둔다 */
.mp-otter svg,.note-otter svg{width:100%;height:100%;display:block;overflow:visible;
  transition:transform .15s cubic-bezier(.22,.9,.3,1.12);}
.note-otter:hover svg{transform:translateY(-2px) scale(1.04);}
.note-otter:active svg{transform:scale(.93);}
.note-otter:focus-visible{outline:2px dashed var(--accent);outline-offset:4px;border-radius:16px;}

/* ═══════════════════════════════════════════════════════════
   해돌이 접기 패널 — 왼쪽으로 휙 던지면 얼굴만 빼꼼, 오른쪽으로 끌면 띠용
   · 기본(peek): 해돌이 얼굴만 왼쪽 끝에 빼꼼 · 질문바·범위 버튼은 숨김
   · expanded: 해돌이 + 질문바 + 범위 버튼 모두 원래 자리
   · 드래그: 오른쪽으로 끌면 띠용 펴짐 · 왼쪽으로 끌면 휙 접힘
   · 빼꼼 상태에서는 둥실 떠다니는 애니메이션 멈춤
   ═══════════════════════════════════════════════════════════ */
.haedol-panel{position:absolute;left:0;bottom:0;z-index:9;
    pointer-events:none;overflow:visible;
    width:100%;height:auto;
    transition:width .55s cubic-bezier(.68,-.55,.27,1.55),
               height .3s ease;}
.haedol-panel>*{pointer-events:auto;}
/* ── 빼꼼(접힌) 상태 ── */
.haedol-panel.peek{overflow:hidden;width:34px;height:128px;
    border-radius:0 18px 18px 0;
    background:transparent;
    cursor:grab;
    pointer-events:auto;}
.haedol-panel.peek .note-otter{
    left:-42px !important;bottom:8px;
    transition:left .55s cubic-bezier(.68,-.55,.27,1.55),
               bottom .3s cubic-bezier(.22,.9,.3,1.12);}
/* 빼꼼에서는 둥실·숨쉬기 애니메이션 멈춤 */
.haedol-panel.peek .note-otter .om-outer,
.haedol-panel.peek .note-otter .om-inner{animation-play-state:paused;}
/* 질문바는 숨김 */
.haedol-panel.peek .ai-askbar{
    transform:translateX(-120px) scale(.85);opacity:0;pointer-events:none;
    transition:transform .5s cubic-bezier(.68,-.55,.27,1.55),opacity .35s ease;}
/* ── 펼친 상태 (띠용!) ── */
.haedol-panel:not(.peek) .note-otter{
    transition:left .55s cubic-bezier(.68,-.55,.27,1.55),
               bottom .3s cubic-bezier(.22,.9,.3,1.12);}
.haedol-panel:not(.peek) .ai-askbar{
    transform:translateX(0) scale(1);opacity:1;pointer-events:auto;
    transition:transform .55s cubic-bezier(.68,-.55,.27,1.55),opacity .4s ease .05s;}
/* ── 드래그 중에는 transition 끔 ── */
.haedol-panel.dragging,.haedol-panel.dragging *{transition:none !important;}
/* ── 빼꼼 얼굴에 호버 시 살살 흔들기 (뽑히고 싶다는 신호) ── */
.haedol-panel.peek .note-otter:hover svg{
    transform:translateX(4px) translateY(-2px) scale(1.06);
    transition:transform .2s ease;}
/* ── 드래그 중 시각 피드백 ── */
.haedol-panel.dragging{cursor:grabbing;}
.haedol-panel .note-otter{cursor:grab;}
@media (prefers-reduced-motion:reduce){
    .haedol-panel,.haedol-panel *{transition-duration:.01s !important;}
}
/* 좁은 화면 빼꼼 */
@media (max-width:640px){
    .haedol-panel.peek{width:30px;height:100px;}
    .haedol-panel.peek .note-otter{left:-38px !important;bottom:6px;}
}

/* ── 애니메이션 기초 ── */
.om-outer{transform-origin:center center;animation:om-float 3s infinite ease-in-out;}
.om-inner{transform-origin:center center;animation:om-breathe 2.5s infinite ease-in-out;}
@keyframes om-float{0%,100%{transform:translateY(0) rotate(-15deg);}50%{transform:translateY(-8px) rotate(-12deg);}}
@keyframes om-breathe{0%,100%{transform:scaleX(1) scaleY(1);}50%{transform:scaleX(1.02) scaleY(0.98);}}
@keyframes om-happy-bounce{
  0%,100%{transform:translateY(0) rotate(-15deg) scale(1, 1);}
  15%{transform:translateY(5px) rotate(-15deg) scale(1.1, 0.9);}
  40%{transform:translateY(-25px) rotate(-5deg) scale(0.95, 1.05);}
  60%{transform:translateY(-25px) rotate(-25deg) scale(0.95, 1.05);}
  80%{transform:translateY(0) rotate(-15deg) scale(1.05, 0.95);}
  90%{transform:translateY(-5px) rotate(-15deg) scale(1, 1);}
}
@keyframes om-sad-wobble{
  0%,100%{transform:translateY(0) rotate(-15deg);}
  20%{transform:translateY(20px) rotate(-25deg);}
  40%{transform:translateY(20px) rotate(-10deg);}
  60%{transform:translateY(20px) rotate(-25deg);}
  80%{transform:translateY(20px) rotate(-15deg);}
}
@keyframes om-groove{0%,50%,100%{transform:translateY(0) rotate(-15deg);}25%{transform:translateY(-7px) rotate(-11deg);}75%{transform:translateY(-7px) rotate(-19deg);}}
@keyframes om-paw-up{0%,100%{transform:translateY(0);}50%{transform:translateY(-5px);}}
@keyframes om-cup-pulse{0%,100%{transform:scale(1);}50%{transform:scale(1.3);}}
@keyframes om-note-float{
  0%{transform:translateY(4px) scale(0.8);opacity:0;}
  25%{opacity:1;}
  70%{opacity:1;}
  100%{transform:translateY(-14px) scale(1);opacity:0;}
}
@keyframes om-present{0%,100%{transform:translateY(0) rotate(-15deg);}50%{transform:translateY(-10px) rotate(-13deg);}}
@keyframes om-doc-sway{0%,100%{transform:rotate(-2.5deg);}50%{transform:rotate(2.5deg);}}
@keyframes om-eureka{
  0%,45%,100%{transform:translateY(0) rotate(-15deg);}
  60%{transform:translateY(-12px) rotate(-10deg);}
  75%{transform:translateY(-10px) rotate(-20deg);}
  90%{transform:translateY(0) rotate(-15deg);}
}
@keyframes om-bulb-pulse{
  0%,45%,100%{transform:scale(1) rotate(0deg);}
  60%{transform:scale(1.18) rotate(-5deg);}
  75%{transform:scale(1.22) rotate(4deg);}
  90%{transform:scale(1.1) rotate(0deg);}
}
@keyframes om-ray-flicker{0%,45%,100%{opacity:0.35;}60%,85%{opacity:1;}}
@keyframes om-paw-wave{
  0%,45%,100%{transform:rotate(0deg) translateY(0);}
  60%{transform:rotate(-10deg) translateY(-4px);}
  75%{transform:rotate(6deg) translateY(-2px);}
  90%{transform:rotate(0deg) translateY(0);}
}
@keyframes om-sparkle{0%{transform:scale(0) rotate(0);opacity:0;}50%{transform:scale(1.2) rotate(90deg);opacity:1;}100%{transform:scale(0) rotate(180deg);opacity:0;}}
@keyframes om-teardrop{
  0%{transform:translateY(0) scale(0);opacity:0;}
  20%{transform:translateY(5px) scale(1);opacity:1;}
  80%{transform:translateY(15px) scale(0.8);opacity:0;}
  100%{transform:translateY(15px) scale(0);opacity:0;}
}

/* ── 소품/표정 기본 표시 ── */
.om-prop-music,.om-prop-doc,.om-prop-idea,
.om-face-happy,.om-face-sad,.om-face-idea,
.om-fx-happy,.om-fx-sad{display:none;}

/* ── 노래: 헤드폰 · 어깨장 · 음표 · 신난 표정 ── */
svg.om-music .om-prop-starfish{display:none;}
svg.om-music .om-prop-music{display:block;}
svg.om-music .om-face-idle{display:none;}
svg.om-music .om-face-happy{display:block;}
svg.om-music .om-outer{animation:om-groove 1.6s infinite ease-in-out;}
svg.om-music .om-paw-l{animation:om-paw-up 0.8s infinite ease-in-out;transform-box:fill-box;transform-origin:center;}
svg.om-music .om-paw-r{animation:om-paw-up 0.8s infinite ease-in-out 0.4s;transform-box:fill-box;transform-origin:center;}
svg.om-music .om-cup-inner{animation:om-cup-pulse 1.6s infinite ease-in-out;transform-box:fill-box;transform-origin:center;}
svg.om-music .om-note{animation:om-note-float 2s infinite ease-in-out;transform-box:fill-box;transform-origin:center;opacity:0;}
svg.om-music .om-note2{animation-delay:1s;}

/* ── 문서(노트): 서류를 내밀며 살랑 ── */
svg.om-doc .om-prop-starfish{display:none;}
svg.om-doc .om-prop-doc{display:block;}
svg.om-doc .om-outer{animation:om-present 2.4s infinite ease-in-out;}
svg.om-doc .om-doc-group{animation:om-doc-sway 2.4s infinite ease-in-out;transform-box:fill-box;transform-origin:top center;}

/* ── 아이디어: 전구 · 번쩍 · 눈 반짝 ── */
svg.om-idea .om-prop-starfish{display:none;}
svg.om-idea .om-prop-idea{display:block;}
svg.om-idea .om-face-idle{display:none;}
svg.om-idea .om-face-idea{display:block;}
svg.om-idea .om-outer{animation:om-eureka 2.8s infinite ease-in-out;}
svg.om-idea .om-bulb{animation:om-bulb-pulse 2.8s infinite ease-in-out;transform-box:fill-box;transform-origin:center;}
svg.om-idea .om-rays{animation:om-ray-flicker 2.8s infinite ease-in-out;}
svg.om-idea .om-paw-up{animation:om-paw-wave 2.8s infinite ease-in-out;transform-box:fill-box;transform-origin:center;}

/* ── 정답: 폴짝 · 반짝반짝 · 볼터치 강조 ── */
svg.om-correct .om-face-idle{display:none;}
svg.om-correct .om-face-happy{display:block;}
svg.om-correct .om-fx-happy{
  display:block;transform-box:fill-box;transform-origin:center;
  animation:om-sparkle 1s ease-in-out forwards;
}
svg.om-correct .om-outer{animation:om-happy-bounce 1s ease-in-out;}
svg.om-correct .om-blush{
  fill:#ff7da1;transform-box:fill-box;transform-origin:center;
  transform:scale(1.3);transition:all 0.2s;
}

/* ── 오답: 흐느적 · 눈물 ── */
svg.om-wrong .om-face-idle{display:none;}
svg.om-wrong .om-face-sad{display:block;}
svg.om-wrong .om-fx-sad{
  display:block;transform-box:fill-box;transform-origin:top center;
  animation:om-teardrop 1s ease-in-out forwards;
}
svg.om-wrong .om-outer{animation:om-sad-wobble 1s ease-in-out;}

/* ── 폰 · 움직임 줄이기 ── */
@media(max-width:640px){
  /* 폰은 바가 화면 폭을 거의 다 차지하므로 바로 왼쪽 대신 바 왼쪽 위로 올린다. */
  .mp-otter{left:8px;right:auto;top:auto;bottom:calc(100% + 4px);margin-top:0;width:54px;height:54px;}
  .note-otter{left:18px;bottom:8px;width:68px;height:68px;}
  .note-otter.draw-on{bottom:8px;}
}
/* 중간 폭: 하단 바가 화면 중앙에 붙어 있으니 해돌이를 바 왼쪽 위로 올려 겹침을 피한다. */
@media(min-width:641px) and (max-width:880px){
  .mp-otter{left:8px;right:auto;top:auto;bottom:calc(100% + 4px);margin-top:0;width:64px;height:64px;}
}
@media(prefers-reduced-motion:reduce){
  .mp-otter *,.note-otter *{animation:none!important;}
}


/* ═══════════════════════════════════════════════════════════════════
   18.2 · 해돌이 스쿼드 (Notion '해돌이 스쿼드' om- 접두어 그대로)
   · 편지 해돌이(.yp-otter)  : 엽스코드 첫 입장(채팅 없을 때) 정가운데 크게
   · 비행기 해돌이(.plane-otter): 홈 화면에서 아주 가끔 왼쪽 위 → 오른쪽으로 날아감
   · 커피 해돌이(.set-otter) : 설정 창 오른쪽 아래
   · 독서 해돌이(.fc-otter)  : 타이머(집중) 화면 왼쪽 아래
   누르면 쭈뼛-뾰쪽 + 선물 파티클 + 말풍선(om-say). 클래스·키프레임 전부 om- 접두어.
   ═══════════════════════════════════════════════════════════════════ */

/* ── 공유 기초 (Notion 원본) ── */
.om-defs{position:absolute;width:0;height:0;overflow:hidden;}
.om-mini{position:relative;display:inline-block;width:150px;
  cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;}
.om-mini.om-w-flight{width:200px;}
.om-mini svg{display:block;width:100%;height:auto;overflow:visible;}
.om-mini:active{transform:scale(0.96);}
.om-mini .om-px,.om-mini .om-anim{transform-box:fill-box;transform-origin:center;}

/* 누르면 쭈뼛-뾰쪽! */
@keyframes om-pop{
  0%{transform:scale(1,1);}
  30%{transform:scale(1.1,0.88);}
  55%{transform:scale(0.94,1.08);}
  80%{transform:scale(1.03,0.97);}
  100%{transform:scale(1,1);}
}
.om-mini.om-got .om-px{animation:om-pop 0.55s ease;}

/* 선물 파티클 */
.om-gift{position:absolute;font-size:24px;pointer-events:none;z-index:6;
  transform:translate(-50%,-50%);animation:om-rise 1.15s ease-out forwards;}
@keyframes om-rise{
  0%{transform:translate(-50%,-50%) scale(0.4);opacity:0;}
  15%{opacity:1;}
  100%{transform:translate(-50%,-210%) scale(1.25);opacity:0;}
}

/* 말풍선 */
.om-say{position:absolute;left:50%;top:2px;
  transform:translate(-50%,-100%) scale(0.8);
  background:#fff;border:2px solid #3d2314;border-radius:10px;
  padding:3px 9px;font-size:11px;font-weight:bold;color:#3d2314;
  white-space:nowrap;opacity:0;transition:all 0.2s;pointer-events:none;z-index:7;}
.om-say::after{content:'';position:absolute;left:50%;bottom:-6px;
  transform:translateX(-50%);border:5px solid transparent;border-top-color:#3d2314;border-bottom:none;}
.om-say.om-on{opacity:1;transform:translate(-50%,-100%) scale(1);}

/* ── 비행기 해돌이 ── */
@keyframes om-glide{0%,100%{transform:translate(0,0) rotate(-2deg);}50%{transform:translate(-12px,-8px) rotate(2.5deg);}}
.om-w-flight .om-anim{animation:om-glide 3.6s ease-in-out infinite;}
@keyframes om-prop{0%,100%{transform:scaleX(1);}50%{transform:scaleX(0.15);}}
.om-prop{animation:om-prop 0.16s linear infinite;transform-box:fill-box;transform-origin:center;}
@keyframes om-wind{0%,100%{opacity:0.25;}50%{opacity:0.9;}}
.om-wind{animation:om-wind 1s ease-in-out infinite;}
.om-wind2{animation-delay:0.3s;}
.om-wind3{animation-delay:0.6s;}

/* ── 졸리는 해돌이 ── */
@keyframes om-sleepbreath{0%,100%{transform:scale(1);}50%{transform:scale(1.03);}}
.om-w-sleep .om-anim{animation:om-sleepbreath 2.6s ease-in-out infinite;}
@keyframes om-zfloat{
  0%{transform:translateY(0);opacity:0;}
  25%{opacity:1;}
  100%{transform:translateY(-10px);opacity:0;}
}
.om-z{animation:om-zfloat 2.4s ease-out infinite;}
.om-z2{animation-delay:0.8s;}
.om-z3{animation-delay:1.6s;}

/* ── 커피 · 독서 · 편지 공통(둥실) ── */
@keyframes om-bob{0%,100%{transform:translateY(0);}50%{transform:translateY(-3px);}}
.om-w-coffee .om-anim{animation:om-bob 2.4s ease-in-out infinite;}
.om-w-read .om-anim{animation:om-bob 3s ease-in-out infinite;}
.om-w-mail .om-anim{animation:om-bob 2.2s ease-in-out infinite;}
@keyframes om-steam{
  0%{transform:translateY(0);opacity:0;}
  30%{opacity:0.8;}
  100%{transform:translateY(-9px);opacity:0;}
}
.om-steam{animation:om-steam 2s ease-out infinite;}
.om-steam2{animation-delay:1s;}
@keyframes om-bookflip{0%,100%{transform:scaleY(1);}50%{transform:scaleY(0.94);}}
.om-book{animation:om-bookflip 2.6s ease-in-out infinite;transform-box:fill-box;transform-origin:top center;}
@keyframes om-wavehand{
  0%,100%{transform:rotate(0deg);}
  25%{transform:rotate(-18deg);}
  60%{transform:rotate(10deg);}
}
.om-wavehand{animation:om-wavehand 1.6s ease-in-out infinite;transform-box:fill-box;transform-origin:30% 85%;}

/* ── ① 편지 해돌이 — 엽스코드 입장 게이트(로그인/비회원 선택) 카드 정가운데 크게 ── */
/*   (빈 채팅 안내(.yp-empty)에는 해돌이를 두지 않는다 — 입장하면 시스템 메시지가
     바로 생겨 보일 일이 없어서) */
.yp-otter{display:block;width:160px;margin:0 auto 6px;cursor:pointer;}
.yp-otter .om-say{font-size:11.5px;}

/* ── ② 비행기 해돌이 — 홈에서 아주 가끔 왼쪽 위 → 오른쪽 횡단 ── */
.plane-otter{position:fixed;left:-240px;top:clamp(64px,12vh,150px);
  width:150px;z-index:1450;opacity:0;visibility:hidden;pointer-events:none;cursor:default;
  /* 18.3 · 비행기가 화면 가장 오른쪽 끝까지 완전히 날아가게, 창 이동 알고리즘
     (sdyViewportBox) 이 잰 정확한 화면 폭을 JS 가 --plane-fly-dx 로 꽂아준다.
     폭/배율이 어떻든 상관없이 오른쪽 바깥으로 비행기 전체가 빠져나간다. */
  --plane-fly-dx:calc(100vw + 560px);
}
.plane-otter.fly{opacity:1;visibility:visible;animation:planeFly 12s linear forwards;}
@keyframes planeFly{
  0%{transform:translateX(0);}
  100%{transform:translateX(var(--plane-fly-dx));}
}

/* ── ③ 커피 해돌이 — 설정 창 오른쪽 아래 ── */
.set-otter{position:fixed;right:20px;bottom:18px;width:92px;height:92px;z-index:2;cursor:pointer;}

/* ── ④ 독서 해돌이 — 타이머(집중) 화면 왼쪽 아래 (거의 바닥까지 내려앉힌다) ── */
.fc-otter{position:absolute;left:clamp(10px,3vw,44px);bottom:clamp(14px,3.5vh,42px);
  width:96px;height:96px;z-index:4;cursor:pointer;transition:opacity .45s ease;}
.fc-otter .om-say{font-size:11.5px;}
/* 가만히 있으면(집중 모드) 조작 버튼과 함께 해돌이도 부드럽게 사라진다 */
#focusClock.idle .fc-otter{opacity:0;pointer-events:none;}

/* ── ⑤ 졸리는 해돌이 — 사용법·단축키 설명을 가장 아래로 스크롤해야 보인다
      (keyBody 스크롤 영역 맨 끝에 들어 있어 평소엔 화면 밖에 있다) ── */
.keys-otter{display:block;margin:4px auto 0;width:96px;height:96px;cursor:pointer;flex:none;}
.keys-otter .om-say{font-size:11px;}

/* ── 폰 · 작은 화면 ── */
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
  .yp-otter{width:124px;margin:0 auto 4px;}
  .set-otter{right:10px;top:max(10px,var(--ph-top,0px));bottom:auto;width:62px;height:62px;}
  .fc-otter{left:10px;bottom:calc(var(--ph-safe,0px) + 38px);width:64px;height:64px;}
  .fc-otter .om-say{font-size:10.5px;}
  .plane-otter{width:110px;}
  .keys-otter{width:72px;height:72px;margin:2px auto 0;}
  .keys-otter .om-say{font-size:10.5px;}
}
@media (max-height:560px) and (pointer:coarse) and (orientation:landscape){
  .fc-otter{bottom:calc(var(--ph-safe,0px) + 32px);}
  .set-otter{top:calc(var(--ph-top,0px) + 8px);}
}
@media(prefers-reduced-motion:reduce){
  .yp-otter *,.set-otter *,.fc-otter *,.plane-otter *,.keys-otter *{animation:none!important;}
  .plane-otter{display:none!important;}
}


/* ── 18.3 · 해돌이 임티 (카톡 미모티콘식) ──
   #ypStickerDefs 의 <template> 에서 복제된 om-mini 를 채팅·선택창·반응에서 쓴다.
   (om-mini/om-w-flight 의 width 규칙보다 뒤에 있어야 크기가 적용된다) */
.yp-stk{display:block;width:100%;height:auto;cursor:inherit;pointer-events:none;}
.yp-stk svg{display:block;width:100%;height:auto;overflow:visible;}
.yp-stk.yp-stk-pick{width:44px;}
.yp-stk.yp-stk-inline{display:inline-block;width:42px;height:auto;vertical-align:-0.6em;margin:0 3px;}
.yp-stk.yp-stk-big{width:116px;}
.yp-stk.yp-stk-chip{width:24px;height:24px;}
/* 임티 하나만 온 메시지 — 말풍선 없이 큰 스티커로 */
.yp-stkmsg{display:inline-block;margin:2px 0 3px;line-height:0;}
.yp-stkmsg .yp-stk{width:120px;}
/* 반응 칩 속 임티 */
.yp-reacts .yp-stk{display:inline-block;width:18px;height:18px;vertical-align:-0.3em;margin:0 1px;}
.yp-reacts button .cnt{margin-left:1px;}



/* 14.18.2 · 부드러운 형광펜 — 저장 span 배경은 그대로 두고, 화면 표시만
   .tb 아래의 절대 레이어(svg .sdy-hl-layer)로 줄 단위 연속 띠 + 둥근 끝을
   그린다. z-index:-1 로 글자 아래에 깔리며(.tb 는 position:absolute + z-index
   라 이미 스택 컨텍스트), pointer-events:none 으로 편집·선택을 방해하지 않는다.
   레이아웃을 못 재는 환경에서는 레이어가 없어 기존 span 배경이 폴백이 된다. */
.tb .sdy-hl-layer{position:absolute;left:0;top:0;width:1px;height:1px;overflow:visible;pointer-events:none;z-index:-1;}
/* 일반 형광펜도 둥근 꼭짓점을 유지한다. 레이어가 있는 브라우저에서는 실제 색은
   SVG 띠가 맡고, 저장 span 배경은 숨겨 이중 칠해짐 없이 '같은 둥근 형식'만 남긴다. */
.tb-content [style*="background-color"],.tb-content mark{
  border-radius:.28em;
  -webkit-box-decoration-break:clone;
  box-decoration-break:clone;
}
/* 15.27 · 표 칸(.in-tbl)의 .tb-content 배경은 '칸 채우기'다. 위 투명화 규칙을
   그대로 두면 채운 색이 지워지고 글자에만 형광펜이 남는다(사용자 보고) →
   상자 배경 투명화는 '표 칸이 아닌 글상자(상자 전체 형광펜)'에만 적용한다.
   칸 안 글자의 형광펜은 아래 두 줄(자손 span·mark)로 계속 띠가 맡는다. */
.tb:not(.in-tbl).sdy-hl-band-on .tb-content[style*="background-color"],
.tb.sdy-hl-band-on .tb-content [style*="background-color"],
.tb.sdy-hl-band-on .tb-content mark{
  background-color:transparent!important;
}

/* 14.29.2 · 문장 안에 섞여 들어온 수식(해돌이가 쓴 $…$)
   저장은 <span class="imath" data-latex="…">$…$</span> 그대로이고,
   화면에서만 KaTeX 로 채운다. 글줄 흐름을 깨지 않게 인라인으로 앉히고,
   글자 크기는 그 자리 본문 크기를 따른다. */
.tb-content .imath{display:inline-block;vertical-align:-.14em;line-height:1.1;
  white-space:normal;max-width:100%;}
/* 15.5 · 가져온 문서·닻 삽입용 절대좌표 인라인 수식 — 글상자 안 원하는 자리 */
.tb-content .imath[data-imath-abs]{position:absolute;vertical-align:baseline;}
.tb-content .imath .katex{font-size:1.02em;line-height:1.1;}
.tb-content .imath .katex-display{margin:0;}
/* 15.11 · 가져온 인라인 수식(imath-imp) — PDF 에서 문단 글상자 안 '글자 사이'로
   심어 온 수식. 파서가 잰 원래 크기(font-size)·원래 자리(베이스라인 닻
   data-base-rel) 그대로 그린다. imathFill 이 채운 뒤 rAF 맞춤(_imathFitSpan)은
   렌더가 잉크 폭(data-ink-w)보다 넓을 때만 폭에 맞게 줄인다(15.39 · 세로 축소
   없음) · KaTeX 1em/1.05. */
.tb-content .imath.imath-imp{position:absolute;vertical-align:baseline;
  white-space:nowrap;max-width:none;}
.tb-content .imath.imath-imp .katex{font-size:1em;line-height:1.05;}
.tb-content .imath.imath-imp .katex-display{margin:0;}
/* 편집(줄 흐름) 중에는 절대좌표를 걷어내고 글자처럼 흐른다 — 베이스라인 맞춤. */
.tb-content .sdy-tl .imath{white-space:nowrap;max-width:none;}
/* 15.11 · 줄 흐름(편집) 안의 가져온 수식 — 절대좌표 클래스 규칙을 되돌려
   글자처럼 흐르게 한다(인라인 style 로도 지우지만 CSS 안전망). */
.tb-content .sdy-tl .imath.imath-imp{position:static;}
.tb-content .sdy-tl .imath.imath-imp[style*="font-size"]{line-height:1.1;}

/* ══════════════════════════════════════════════════════════════════════
   14.23.0 · 노트 해돌이 — 창 없이 바로 말하는 AI 노트 도우미
   ─────────────────────────────────────────────────────────────────────
   · 아이콘 버튼·뜨는 창은 없어졌다. 노트를 열으면 해돌이(#noteOtter) 옆에
     한 줄 검색창(#aiAsk)이 붙고, '이 페이지'·'전체 페이지' 버튼 둘은
     검색창 안 왼쪽에 나란히 둔다. 보내기 버튼은 없다 — Enter 를 누르면
     바로 묻는다. 15.27.1 · 검색창은 해돌이 오른쪽에 바짝(left:132px) 붙고
     가로는 고정 — 왼쪽 위치는 유지한 채 오른쪽 길이만 줄여 왔고(600 → 480 → 320px,
     15.28.2 에서 기존의 2/3), 글을 적어도 옆으로는 안 늘고 위로만 자란다. 세로도
     15.28.2 에서 14 → 28px 로 조금 올려 화면 아래에 붙지 않게 했다.
   · 답은 해돌이 말풍선(#aiSay) — 꼬리가 해돌이 쪽(왼쪽 아래)을 가리키고,
     X(#aiSayX)를 눌러 닫기 전까지 계속 떠 있다(자동 숨김 없음).
     답이 길면 말풍선 본문(#aiSayBody)을 아래로 스크롤해 전부 읽는다.
   · 해돌이에게 커서를 올리면 아이디어(전구)로 변신하고, 해돌이를 누르면
     대화기록(#aiHist)이 같은 자리에 열린다.
   · 유리 질감은 음악 바·플레이어와 같은 --g-* 토큰 → 다크모드 자동.
   ══════════════════════════════════════════════════════════════════════ */

/* ── 검색창 — 해돌이 바로 오른쪽에 바짝 붙인 한 줄. 액션 버튼은 칸 안 왼쪽 ──
   검색창은 아래에 고정(bottom)된 기둥이라, 질문칸이 여러 줄로 자라면 상자가
   위를 향해 큰다. 버튼도 같은 칸 안에 있어 질문칸과 함께 올라가고,
   질문칸 폭이 달라져도 가운데가 맞도록 기둥의 자식들을 중앙 정렬한다.
   z-index 는 답변 말풍선(#aiSay, 8)보다 위(9) — 질문을 여러 줄 적으면 이 기둥이
   말풍선 아래쪽까지 올라오는데, 그때 버튼이 말풍선에 깔려 안 눌리면 곤란하다.
   15.27.0 · 해돌이(98px 상자 + 여백) 오른쪽 끝에 최대한 붙였다(140 → 132px).
   15.27.1 · 폭은 600 → 480px 로 줄이되 left:132px 는 유지해 오른쪽만 줄인다.
   15.28.2 · 사용자 요청 — "왼쪽은 냅두고 오른쪽만 줄여 전체 길이를 2/3 로"
     (480 → 320px), "화면 아래쪽에 너무 붙어 있다, 위로 조금만"
     (bottom 14 → 28px). 해돌이(98px) 중심 높이에 칸이 오도록 맞췄다.
   가로 폭은 이 기둥이 정한다(질문칸은 100%) — 절대배치라 100% 가 확실한
   .editor-main 폭에 풀리므로, 칸 폭이 제멋대로 잡히는 일이 없다. */
.ai-askbar{position:absolute;left:132px;bottom:28px;z-index:9;
    display:flex;flex-direction:column;align-items:center;gap:6px;
    width:min(320px,calc(100% - 144px));   /* 15.28.2 · 왼쪽 고정, 오른쪽만 2/3 */
    transition:bottom .3s cubic-bezier(.22,.9,.3,1.12);}
.ai-askbar.draw-on{bottom:28px;}      /* 그리기 막대는 위쪽 — 질문칸은 그대로 */
/* ── 질문칸 안 액션 버튼 그룹 (이 페이지·전체 페이지·다이어그램) ── */
.ai-ask-actions{display:flex;align-items:center;gap:2px;flex:none;}
.ai-ask-action{flex:none;display:flex;align-items:center;justify-content:center;
    width:30px;height:30px;border:0;border-radius:8px;background:transparent;
    color:var(--text3);font-size:15px;cursor:pointer;transition:all .15s ease;}
.ai-ask-action:hover{background:rgba(255,255,255,.08);color:var(--text1);}
.ai-ask-action:active{transform:scale(.9);}
.ai-ask-action.ready{color:var(--accent);}
.ai-ask-sep{flex:none;width:1px;height:20px;background:var(--g-line);margin:0 4px;opacity:.5;}
.ai-diagram-toggle{position:relative;}
.ai-diagram-toggle[aria-pressed="true"]{color:color-mix(in srgb,#8054d8 88%,var(--text1));background:color-mix(in srgb,#b99bff 14%,transparent);}
.dark .ai-diagram-toggle[aria-pressed="true"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#d9caff;}
.ai-diagram-scope-wrap{display:inline-flex;align-items:center;gap:5px;
    padding:3px 7px 3px 10px;border:1px solid var(--g-line);border-radius:999px;
    background:var(--g-in);color:var(--text3);font-size:10px;font-weight:750;}
.ai-diagram-scope-wrap[hidden]{display:none;}
.ai-diagram-scope-wrap select{max-width:150px;border:0;outline:0;background:transparent;
    color:var(--text1);font:inherit;font-size:11px;font-weight:750;cursor:pointer;}
.ai-diagram-scope-wrap select option{background:var(--card);color:var(--text1);}
.ai-askbar.diagram-mode .ai-askbar-field{
    border-color:color-mix(in srgb,#9b78ef 42%,var(--g-brd));
    box-shadow:var(--g-hi),0 0 0 3px color-mix(in srgb,#9b78ef 10%,transparent),var(--g-shadow);}
/* 입력 칸 — 검색창 모양(둥근 필). 보내기 버튼은 없다(Enter 로 바로 묻는다).
   15.27.1 · 데스크톱 최대 폭은 480px — 왼쪽을 고정하고 오른쪽만 줄였다.
   15.28.2 · 그 480px 의 2/3 인 320px(왼쪽 고정 · 오른쪽만), 세로는 bottom 28px.
   글을 아무리 적어도 옆으로는 자라지 않고, 폭을 넘으면 줄이 되어 위로만 자란다.
   여러 줄이 되면 .multi 가 붙어 모서리가 각져 보이고, 상자는 아래에 고정된
   채로 위를 향해 자란다(검색창이 bottom 고정이라 자연스레 위로 자람). */
.ai-askbar-field{display:flex;align-items:center;gap:6px;
    width:100%;   /* 15.27.0 · 기둥(.ai-askbar)이 정한 가로 폭 그대로 — 자동 확장 없음 */
    border:1px solid var(--g-brd);background:var(--g-fill-strong);
    backdrop-filter:blur(14px) saturate(150%);-webkit-backdrop-filter:blur(14px) saturate(150%);
    box-shadow:var(--g-hi),var(--g-shadow);
    border-radius:999px;padding:5px 12px 5px 4px;
    transition:border-color .16s ease,box-shadow .16s ease;}
.ai-askbar-field.multi{border-radius:20px;align-items:flex-end;}
.ai-askbar-field.multi .ai-dot,.ai-askbar-field.multi .ai-edittag{margin-bottom:5px;}
.ai-askbar-field:focus-within{border-color:var(--accent);box-shadow:var(--g-hi),0 0 0 3px rgba(79,110,247,.14);}
/* 느낌표로 시작하면 질문이 아니라 문서 편집이라는 것을 보내기 전에 분명히 표시한다. */
.ai-askbar.edit-on .ai-askbar-field{
    border-color:color-mix(in srgb,#a855f7 72%,var(--g-brd));
    box-shadow:var(--g-hi),0 0 0 3px color-mix(in srgb,#a855f7 16%,transparent),var(--g-shadow);}
.ai-edittag{flex:none;border-radius:999px;padding:2px 7px;line-height:1.35;
    border:1px solid color-mix(in srgb,#a855f7 42%,transparent);
    color:color-mix(in srgb,#a855f7 78%,var(--text1));
    background:color-mix(in srgb,#a855f7 12%,var(--g-in));
    font-size:10px;font-weight:850;letter-spacing:.03em;}
.ai-edittag[hidden]{display:none;}
/* 15.27.0 · 높이 상한을 96 → 140px 로 올렸다 — 많이 적으면 그만큼 더 위로
   자라고(약 7줄), 그마저 넘으면 칸 안에서 스크롤한다(가로로는 안 자란다). */
#aiQ{flex:1 1 auto;min-width:0;border:0;background:transparent;color:var(--text1);
    font:inherit;font-size:13.5px;line-height:1.4;outline:none;padding:0;
    display:block;width:100%;resize:none;overflow-y:auto;max-height:140px;
    scrollbar-width:none;}
/* textarea 기본 세로 스크롤 버튼(위·아래 화살표)은 감추되 휠·키보드 스크롤은 유지한다. */
#aiQ::-webkit-scrollbar{display:none;width:0;height:0;}
/* 좁은 화면에서도 안내 문구가 중간에서 줄바꿈되어 잘리지 않게 한다. */
#aiQ::placeholder{color:var(--text3);font-size:12.5px;letter-spacing:-.02em;white-space:nowrap;}
/* 키 상태 점 — 초록=켜짐, 주황=키 아직 미등록(서버 .env) */
.ai-dot{flex:none;width:9px;height:9px;border-radius:50%;
    background:#f59e0b;box-shadow:0 0 6px rgba(245,158,11,.8);}
.ai-askbar.ai-on .ai-dot{background:#22c55e;box-shadow:0 0 7px rgba(34,197,94,.9);}

/* ── 해돌이 답변 말풍선 — 닫기 전까지 계속 떠 있다 ── */
/* 15.27.0 · 자리를 122 → 110px 로 내려 해돌이 머리에 더 바짝 붙였다. 꼬리도
   왼쪽 끝(28)이 아니라 해돌이 정수리(44)를 가리키게 옮겼다.
   --ai-lift : 질문칸이 여러 줄로 자라 검색창 기둥이 위로 올라오면,
   그 자리와 겹치지 않게 JS(aiQGrow)가 말풍선을 그만큼 더 올려 둔다(기본 0) */
.ai-say{position:absolute;left:30px;bottom:calc(110px + var(--ai-lift,0px));width:min(620px,calc(100vw - 60px));
    z-index:8;display:flex;flex-direction:column;
    background:linear-gradient(155deg,color-mix(in srgb,var(--g-fill-strong) 96%,white 4%),var(--g-fill-strong));
    backdrop-filter:blur(var(--g-blur-lg)) saturate(165%);
    -webkit-backdrop-filter:blur(var(--g-blur-lg)) saturate(165%);
    border:1px solid color-mix(in srgb,var(--accent) 18%,var(--g-brd));border-radius:21px 21px 21px 8px;
    box-shadow:var(--g-hi),0 14px 38px rgba(35,39,60,.16),var(--g-shadow-lg);
    color:var(--text1);overflow:visible;
    animation:aiPop .3s cubic-bezier(.22,.9,.32,1.06);
    transform-origin:left bottom;
    transition:bottom .3s cubic-bezier(.22,.9,.3,1.12),width .2s ease;}
/* 다이어그램 답변도 별도 폭·높이 규칙 없이 일반 답변과 같은 크기를 쓴다. */
.ai-say[hidden]{display:none;}
.ai-say.draw-on{bottom:calc(110px + var(--ai-lift,0px));}   /* 그리기 막대는 위쪽 */
/* 꼬리 — 아래를 향해 해돌이 얼굴 쪽을 가리킨다 (직접 말하는 느낌) */
.ai-say::after{content:"";position:absolute;left:44px;bottom:-9px;width:0;height:0;
    border:9px solid transparent;border-bottom:0;
    border-top-color:color-mix(in srgb,var(--g-fill-strong) 88%,transparent);
    filter:drop-shadow(0 3px 2px rgba(35,39,60,.08));}
.ai-say-head{flex:none;display:flex;align-items:center;gap:9px;padding:9px 11px 8px 13px;
    border-bottom:1px solid var(--g-line);
    background:linear-gradient(100deg,color-mix(in srgb,var(--accent) 6%,transparent),transparent 72%);
    border-radius:21px 21px 0 0;}
/* 종류 딱지 — 노트 질문인지 자유 질문인지 해돌이가 스스로 판단해 단다 */
.ai-kind{flex:none;font-size:12px;font-weight:800;letter-spacing:.02em;
    color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);
    border:1px solid color-mix(in srgb,var(--accent) 32%,transparent);
    border-radius:999px;padding:2px 8px;line-height:1.35;}
.ai-kind[hidden]{display:none;}
.ai-say-gap{flex:1 1 auto;}
/* 말풍선 안 작은 원형 버튼(멈추기·복사·닫기) */
.ai-mini{flex:none;border:0;background:transparent;color:var(--text3);cursor:pointer;
    width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;
    font-size:14px;line-height:1;padding:0;transition:background .15s ease,color .15s ease;}
.ai-mini:hover{background:var(--g-in);color:var(--text1);}
.ai-mini[hidden]{display:none;}
#aiStop.ai-mini{color:#c0392b;}
.ai-say-body{flex:1 1 auto;min-height:0;max-height:min(44vh,420px);overflow-y:auto;
    padding:11px 15px 8px;
    scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--text3) 45%,transparent) transparent;}
/* 긴 답은 말풍선 안에서 아래로 스크롤해 읽는다 — 스크롤바가 있다는 걸 알 수 있게 */
.ai-say-body::-webkit-scrollbar{width:8px;}
.ai-say-body::-webkit-scrollbar-track{background:transparent;}
.ai-say-body::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text3) 40%,transparent);
    border-radius:999px;border:2px solid transparent;background-clip:content-box;}
.ai-say-body:hover::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text3) 62%,transparent);
    background-clip:content-box;}
.ai-out{font-size:16px;line-height:1.78;color:var(--text1);
    word-break:break-word;overflow-wrap:anywhere;}
.ai-out:empty{display:none;}
/* 14.28.2 · 해돌이 말풍선 안 간단 마크다운 — 제목은 크고 굵게, 중요어 굵게 */
.ai-out p{margin:0 0 6px;}
.ai-out p:last-child{margin-bottom:0;}
.ai-out .md-blank{height:4px;}
.ai-out h1.md-h{font-size:22px;font-weight:800;line-height:1.35;margin:4px 0 8px;color:var(--text1);}
.ai-out h2.md-h{font-size:19px;font-weight:800;line-height:1.35;margin:10px 0 5px;color:var(--text1);}
.ai-out h3.md-h{font-size:17px;font-weight:800;line-height:1.35;margin:8px 0 4px;color:var(--text1);}
.ai-out strong{font-weight:800;color:var(--text1);}
.ai-out em{font-style:italic;}
/* 14.29.2 · 말풍선 안 수식 — 문장에 섞인 $…$ 은 글줄 안에, $$…$$ 은 한 줄로 */
.ai-out .md-math{display:inline-block;vertical-align:-.14em;line-height:1.15;}
.ai-out .md-math .katex{font-size:1.03em;}
.ai-out .md-math-block{display:block;margin:6px 0;text-align:center;}
.ai-out .md-math-block .katex-display{margin:0;}
.ai-out code{font-family:var(--mono,'ui-monospace',Menlo,Consolas,monospace);font-size:14px;
    background:color-mix(in srgb,var(--text1) 8%,transparent);padding:1px 5px;border-radius:4px;}
.ai-out ul,.ai-out ol{margin:2px 0 8px;padding-left:20px;}
.ai-out ul{list-style:disc outside;}
.ai-out ol{list-style:decimal outside;}
.ai-out li{margin:2px 0;}
.ai-out p:has(+ h1.md-h),.ai-out p:has(+ h2.md-h),.ai-out p:has(+ h3.md-h){margin-bottom:2px;}
/* 말하는 중(아직 첫 글자가 안 왔을 때) — 생각하는 점 세 개 */
.ai-typing[hidden]{display:none;}
.ai-typing{display:inline-flex;gap:4px;padding:3px 0 1px;}
.ai-typing i{width:5px;height:5px;border-radius:50%;background:var(--accent);opacity:.35;
    animation:aiDot 1.1s ease-in-out infinite;}
.ai-typing i:nth-child(2){animation-delay:.15s;}
.ai-typing i:nth-child(3){animation-delay:.3s;}
.ai-meta{flex:none;padding:5px 13px 8px;font-size:10.8px;color:var(--text3);line-height:1.5;}
.ai-meta:empty{display:none;}

/* 해돌이 도식 답변 — 작은 제목 카드 + 내용에 맞춰 자라는 상자 + 관계 화살표 */
.ai-out.ai-out-diagram{word-break:normal;overflow-wrap:normal;}
.ai-diagram-answer{display:flex;flex-direction:column;gap:12px;min-width:0;}
.ai-diagram-hero{position:relative;overflow:hidden;padding:13px 15px 14px;
    border:1px solid color-mix(in srgb,var(--accent) 20%,var(--g-line));border-radius:16px;
    background:linear-gradient(132deg,color-mix(in srgb,var(--accent) 9%,var(--card)),
      color-mix(in srgb,#f6b974 8%,var(--card)) 55%,color-mix(in srgb,#8bd8c7 9%,var(--card)));
    box-shadow:inset 0 1px 0 rgba(255,255,255,.46);}
.ai-diagram-hero::after{content:"";position:absolute;width:90px;height:90px;right:-30px;top:-45px;
    border-radius:50%;background:color-mix(in srgb,#fff 19%,transparent);pointer-events:none;}
.ai-diagram-eyebrow{display:flex;align-items:center;gap:6px;margin-bottom:4px;
    color:color-mix(in srgb,var(--accent) 80%,var(--text2));font-size:9px;font-weight:850;
    letter-spacing:.14em;text-transform:uppercase;}
.ai-diagram-eyebrow i{font-size:12px;}
.ai-diagram-answer-title{position:relative;z-index:1;margin:0;color:var(--text1);
    font-size:17px;font-weight:850;line-height:1.35;letter-spacing:-.015em;}
.ai-diagram-summary{position:relative;z-index:1;margin:5px 0 0;color:var(--text2);
    font-size:12.6px;line-height:1.65;}
.ai-diagram-summary p{margin:0;}
.ai-diagram-stack{display:flex;flex-direction:column;gap:10px;}
.ai-diagram-panel{min-width:0;padding:10px 10px 9px;border:1px solid var(--g-line);border-radius:16px;
    background:color-mix(in srgb,var(--card) 87%,transparent);box-shadow:0 5px 16px rgba(37,40,57,.055);}
.ai-diagram-panel-head{display:flex;align-items:center;gap:7px;margin:0 2px 8px;min-width:0;}
.ai-diagram-panel-number{flex:none;width:21px;height:21px;display:inline-flex;align-items:center;justify-content:center;
    border-radius:8px;background:color-mix(in srgb,var(--accent) 12%,var(--g-in));
    color:var(--accent);font-size:9px;font-weight:900;}
.ai-diagram-panel-title{min-width:0;margin:0;color:var(--text1);font-size:12.5px;font-weight:800;line-height:1.35;}
.ai-diagram-layout-badge{flex:none;margin-left:auto;padding:3px 7px;border:1px solid var(--g-line);border-radius:999px;
    color:var(--text3);background:var(--g-in);font-size:9px;font-weight:750;line-height:1.2;}
.ai-diagram-viewport{position:relative;box-sizing:border-box;width:100%;min-height:100px;overflow:hidden;overscroll-behavior:contain;
    contain:layout paint;
    cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;border-radius:12px;
    background-color:color-mix(in srgb,var(--g-in) 55%,var(--card));
    background-image:radial-gradient(color-mix(in srgb,var(--text3) 14%,transparent) .8px,transparent .8px);
    background-size:18px 18px;}
.ai-diagram-viewport::-webkit-scrollbar{height:7px;}
.ai-diagram-viewport::-webkit-scrollbar-track{background:transparent;}
.ai-diagram-viewport::-webkit-scrollbar-thumb{border:2px solid transparent;border-radius:999px;
    background:color-mix(in srgb,var(--text3) 36%,transparent);background-clip:content-box;}
/* 점무늬는 stage가 아니라 viewport 전체에 깔아 자동 축소 뒤 주변 빈 곳에서도 이어진다. */
.ai-diagram-stage{position:absolute;left:0;top:0;display:block;width:100%;min-height:100px;border-radius:12px;
    background:transparent;isolation:isolate;will-change:transform;
    transform-origin:0 0;transition:none!important;}
.ai-diagram-viewport.is-dragging{cursor:grabbing;}
.ai-diagram-viewport:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.ai-diagram-expand,.ai-diagram-viewer-btn{
    display:inline-flex;align-items:center;justify-content:center;gap:6px;flex:none;
    width:32px;height:32px;padding:0;border:1px solid var(--g-line);border-radius:9px;
    background:var(--card);color:var(--text2);cursor:pointer;}
.ai-diagram-expand:hover,.ai-diagram-viewer-btn:hover{background:var(--bg2);color:var(--accent);}
.ai-diagram-expand:focus-visible,.ai-diagram-viewer-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
.ai-diagram-expand svg,.ai-diagram-viewer-btn svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
.ai-diagram-placeholder{width:100%;min-height:100px;}
.ai-diagram-viewer{position:fixed;inset:0;z-index:10020;display:flex;align-items:center;justify-content:center;
    padding:24px;background:rgba(7,11,18,.68);overscroll-behavior:none;}
.ai-diagram-viewer-card{display:flex;flex-direction:column;min-width:0;width:min(1600px,100%);height:100%;max-height:1100px;
    overflow:hidden;border:1px solid var(--g-line);border-radius:20px;background:var(--card);
    box-shadow:0 24px 90px rgba(0,0,0,.28);}
.ai-diagram-viewer-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex:none;padding:16px 20px;
    border-bottom:1px solid var(--g-line);background:var(--card);}
.ai-diagram-viewer-heading{min-width:0;}
.ai-diagram-viewer-title{margin:0;color:var(--text1);font-size:17px;font-weight:800;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ai-diagram-viewer-hint{margin:4px 0 0;color:var(--text3);font-size:12px;line-height:1.4;}
.ai-diagram-viewer-tools{display:flex;align-items:center;gap:6px;flex:none;}
.ai-diagram-viewer-btn{width:36px;height:36px;}
.ai-diagram-viewer-scale{min-width:54px;text-align:center;color:var(--text2);font-size:12px;font-weight:750;font-variant-numeric:tabular-nums;}
.ai-diagram-viewer-fit{width:auto;padding:0 10px;font-size:12px;font-weight:650;}
.ai-diagram-viewer-close{margin-left:6px;}
.ai-diagram-viewer-body{display:flex;flex:1;min-height:0;min-width:0;padding:12px;}
.ai-diagram-viewer .ai-diagram-viewport{flex:1;min-height:0;height:100%;border:1px solid var(--g-line);}
@media(max-width:640px){
    .ai-diagram-viewer{padding:8px;padding-top:max(8px,env(safe-area-inset-top));padding-bottom:max(8px,env(safe-area-inset-bottom));}
    .ai-diagram-viewer-card{border-radius:16px;}
    .ai-diagram-viewer-head{flex-wrap:wrap;gap:10px;padding:12px;}
    .ai-diagram-viewer-heading{width:100%;}
    .ai-diagram-viewer-title{font-size:15px;}
    .ai-diagram-viewer-tools{width:100%;justify-content:flex-end;}
    .ai-diagram-viewer-btn{width:40px;height:40px;}
    .ai-diagram-viewer-fit{width:auto;}
    .ai-diagram-viewer-body{padding:8px;}
}
.ai-diagram-edges{position:absolute;inset:0;z-index:0;overflow:visible;pointer-events:none;}
.ai-diagram-edge{fill:none;stroke:color-mix(in srgb,var(--accent) 60%,var(--text3));stroke-width:1.8;
    stroke-linecap:round;stroke-linejoin:round;opacity:.84;}
.ai-diagram-edge.ai-edge-yes{stroke:#279b83;}
.ai-diagram-edge.ai-edge-no{stroke:#dc737b;}
.ai-diagram-edge-label-bg{fill:var(--card);stroke:var(--g-line);stroke-width:1;}
.ai-diagram-edge-label-bg.ai-edge-yes{fill:color-mix(in srgb,#279b83 8%,var(--card));stroke:color-mix(in srgb,#279b83 42%,var(--g-line));}
.ai-diagram-edge-label-bg.ai-edge-no{fill:color-mix(in srgb,#dc737b 8%,var(--card));stroke:color-mix(in srgb,#dc737b 42%,var(--g-line));}
.ai-diagram-edge-label{fill:var(--text2);font:750 10px/1 var(--font,'Jua',sans-serif);}
.ai-diagram-node{position:absolute;z-index:1;display:flex;flex-direction:column;align-items:flex-start;gap:5px;
    width:fit-content;min-width:148px;max-width:min(260px,calc(100vw - 128px));box-sizing:border-box;
    padding:10px 12px 10px;border:1px solid color-mix(in srgb,var(--ai-node-tone,#8c74db) 38%,var(--g-line));
    border-radius:13px;background:linear-gradient(145deg,
      color-mix(in srgb,var(--ai-node-tone,#8c74db) 7%,var(--card)),var(--card) 70%);
    box-shadow:0 5px 13px rgba(34,37,53,.09),inset 0 1px 0 rgba(255,255,255,.58);
    color:var(--text1);overflow-wrap:anywhere;word-break:normal;}
.ai-node-concept{--ai-node-tone:#9578e8;}
.ai-node-method{--ai-node-tone:#37a994;}
.ai-node-evidence{--ai-node-tone:#4b9cda;}
.ai-node-equation{--ai-node-tone:#638bd8;}
.ai-node-result{--ai-node-tone:#e5a25d;}
.ai-node-decision{--ai-node-tone:#d77da3;}
.ai-node-variable{--ai-node-tone:#8291a6;}
.ai-diagram-node-kind{color:color-mix(in srgb,var(--ai-node-tone) 84%,var(--text2));
    font-size:9px;font-weight:850;letter-spacing:.045em;line-height:1.1;}
.ai-diagram-node-label{margin:0;color:var(--text1);font-size:13px;font-weight:850;line-height:1.35;}
.ai-diagram-node-lane{display:inline-flex;max-width:100%;padding:2px 6px;border-radius:999px;
    background:color-mix(in srgb,var(--ai-node-tone) 12%,var(--g-in));color:var(--text2);
    font-size:9px;font-weight:750;line-height:1.25;}
.ai-diagram-node-detail{color:var(--text2);font-size:11.5px;line-height:1.55;}
.ai-diagram-node-detail p{margin:0;}
.ai-diagram-node-detail ul,.ai-diagram-node-detail ol{margin:2px 0 2px;padding-left:17px;}
.ai-diagram-equation{display:block;max-width:100%;overflow-x:auto;padding:4px 7px;border-radius:8px;
    background:color-mix(in srgb,var(--ai-node-tone) 8%,var(--g-in));color:var(--text1);
    font-size:12px;line-height:1.45;}
.ai-diagram-equation .katex{font-size:1em;}
.ai-diagram-lane-title{position:absolute;z-index:1;display:flex;align-items:center;gap:5px;
    color:var(--text3);font-size:9.5px;font-weight:850;letter-spacing:.04em;}
.ai-diagram-lane-title i{color:var(--accent);font-size:11px;}
.ai-diagram-takeaways{padding:10px 13px 10px;border:1px solid color-mix(in srgb,#3eaa8d 22%,var(--g-line));
    border-radius:14px;background:color-mix(in srgb,#54b99d 6%,var(--card));}
.ai-diagram-takeaways-title{display:flex;align-items:center;gap:6px;margin-bottom:4px;
    color:color-mix(in srgb,#32987f 86%,var(--text1));font-size:10px;font-weight:850;}
.ai-diagram-takeaways-title i{font-size:13px;}
.ai-diagram-takeaways ul{margin:0;padding-left:17px;color:var(--text2);font-size:11.5px;line-height:1.55;}
.ai-diagram-takeaways li{margin:2px 0;}
.ai-diagram-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
    clip:rect(0,0,0,0);white-space:nowrap;border:0;}
.ai-diagram-fallback{padding:9px 11px;border:1px solid color-mix(in srgb,#dfa45e 36%,var(--g-line));
    border-radius:12px;background:color-mix(in srgb,#efb86d 8%,var(--card));color:var(--text2);font-size:12px;}
@keyframes aiPop{
  from{opacity:0;transform:translateY(10px) scaleX(.88) scaleY(.72);}
  50%{opacity:1;transform:translateY(3px) scaleX(1) scaleY(.88);}
  to{opacity:1;transform:none;}
}
@keyframes aiDot{0%,80%,100%{transform:translateY(0);opacity:.35;}40%{transform:translateY(-4px);opacity:1;}}

/* ── 대화기록 — 해돌이를 누르면 열리는 목록 ── */
.ai-hist{position:absolute;left:30px;bottom:calc(110px + var(--ai-lift,0px));width:min(520px,calc(100vw - 60px));
    z-index:8;display:flex;flex-direction:column;max-height:min(46vh,420px);
    background:var(--g-fill-strong);
    backdrop-filter:blur(var(--g-blur-lg)) saturate(160%);
    -webkit-backdrop-filter:blur(var(--g-blur-lg)) saturate(160%);
    border:1px solid var(--g-brd);border-radius:18px 18px 18px 6px;
    box-shadow:var(--g-hi),var(--g-shadow-lg);
    color:var(--text1);overflow:visible;
    animation:aiPop .3s cubic-bezier(.22,.9,.32,1.06);
    transform-origin:left bottom;
    transition:bottom .3s cubic-bezier(.22,.9,.3,1.12);}
.ai-hist[hidden]{display:none;}
.ai-hist.draw-on{bottom:calc(110px + var(--ai-lift,0px));}
.ai-hist::after{content:"";position:absolute;left:44px;bottom:-9px;width:0;height:0;
    border:9px solid transparent;border-bottom:0;
    border-top-color:rgba(255,255,255,.74);}
.dark .ai-hist:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{border-top-color:rgba(25,28,39,.9);}
.ai-hist-head{flex:none;display:flex;align-items:center;gap:8px;padding:9px 10px 8px 13px;
    border-bottom:1px solid var(--g-line);}
.ai-hist-ttl{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:6px;
    font-size:12.5px;color:var(--text1);}
.ai-hist-ttl i{color:var(--accent);font-size:15px;}
.ai-hist-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:6px;}
.ai-hist-empty{padding:18px 14px;font-size:12.5px;color:var(--text3);text-align:center;line-height:1.6;}
/* 기록 한 줄 — 채팅 말풍선 형식(내 질문 + 해돌이 답) — 누르면 본 말풍선으로 다시 보여 준다 */
.ai-hist-item{display:flex;flex-direction:column;gap:6px;width:100%;text-align:left;
    border:1px solid transparent;background:transparent;border-radius:12px;padding:9px 9px 8px;
    cursor:pointer;color:var(--text2);font:inherit;
    transition:background .15s ease,border-color .15s ease;}
.ai-hist-item:hover{background:var(--g-in);border-color:var(--g-line);}
.ai-hist-row{display:flex;align-items:center;gap:6px;}
.ai-hist-t{margin-left:auto;font-size:10px;color:var(--text3);}
/* 이전 단일 줄 요약 — 호환 유지 */
.ai-hist-q{font-size:12.5px;font-weight:700;color:var(--text1);
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ai-hist-a{font-size:11.5px;color:var(--text3);line-height:1.45;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
/* 채팅 말풍선형 기록 — 질문은 오른쪽, 답변은 왼쪽 */
.ai-hist-bubble{border-radius:12px;padding:7px 10px;font-size:12.2px;line-height:1.55;
    word-break:break-word;overflow-wrap:anywhere;max-width:100%;}
.ai-hist-bubble b{font-weight:800;margin-right:5px;}
.ai-hist-user{background:color-mix(in srgb,var(--accent) 10%,var(--g-in));
    border:1px solid color-mix(in srgb,var(--accent) 18%,transparent);
    color:var(--text1);border-radius:12px 12px 4px 12px;align-self:flex-end;
    max-width:92%;}
.ai-hist-user b{color:var(--accent);}
.ai-hist-bot{background:var(--card);
    border:1px solid var(--g-line);color:var(--text1);
    border-radius:12px 12px 12px 4px;align-self:flex-start;
    max-width:92%;box-shadow:0 1px 4px rgba(23,28,41,.06);}
.ai-hist-bot b{color:var(--accent);}
.ai-hist-bot .ai-hist-a-html{font-size:12.2px;line-height:1.6;color:var(--text1);}
.ai-hist-bot .ai-hist-a-html p{margin:0 0 4px;}
.ai-hist-bot .ai-hist-a-html p:last-child{margin-bottom:0;}
.ai-hist-bot .ai-hist-a-html strong{font-weight:800;color:var(--text1);}
.ai-hist-diagram-preview{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;
    overflow:hidden;color:var(--text2);font-size:11.5px;line-height:1.5;}
.ai-hist-list{display:flex;flex-direction:column;gap:4px;}
.ai-hist .ai-kind{font-size:9.5px;padding:1px 6px;}

/* 좁은 화면 — 검색창은 해돌이 옆 한 줄을 남은 폭에, 말풍선·기록은 좌우 가득 */
@media (max-width:640px){
    .ai-askbar{left:90px;bottom:22px;width:calc(100% - 102px);}
    .ai-askbar-field{width:100%;}
    .ai-say{left:10px;right:10px;bottom:calc(80px + var(--ai-lift,0px));width:auto;}
    .ai-say-body{max-height:44vh;}
    .ai-diagram-panel{padding:8px 7px 7px;}
    .ai-diagram-panel-head{gap:5px;}
    .ai-diagram-layout-badge{font-size:8px;padding:3px 6px;}
    .ai-diagram-node{max-width:min(250px,calc(100vw - 106px));padding:9px 10px;}
    .ai-hist{left:10px;right:10px;bottom:calc(80px + var(--ai-lift,0px));width:auto;max-height:50vh;}
}

/* ═══════════════════════════════════════════════════════════════════
   22.0 · 저사양/똥컴 경량 모드 (body.sdy-turbo)

   JS의 sdyLowEnd/sdyTurbo 판정이 켜면 body 에 .sdy-turbo 를 붙인다.
   '읽기 우선(쪽 그림 한 장) + 셸 가상화' 결과는 그대로 유지하면서,
   그 위에서 장식 비용(오로라·벽지·blur·애니메이션·box-shadow·집게)만 끊는다.
   기능(편집·표·그림·검색·AI)은 하나도 닫지 않는다.
   ═══════════════════════════════════════════════════════════════════ */
body.sdy-turbo #sdyAmbient,
body.sdy-turbo #wallLayer{display:none!important;}
body.sdy-turbo #clawFx{display:none!important;}
body.sdy-turbo .header,
body.sdy-turbo .editor-toolbar,
body.sdy-turbo .side-bar,
body.sdy-turbo .toast,
body.sdy-turbo .modal-bg,
body.sdy-turbo .modal-box,
body.sdy-turbo .ai-hist,
body.sdy-turbo .ai-say,
body.sdy-turbo .ai-askbar,
body.sdy-turbo .mp,
body.sdy-turbo .mpb,
body.sdy-turbo #focusClock,
body.sdy-turbo .fcard-win,
body.sdy-turbo .sa-card,
body.sdy-turbo .ypg-card,
body.sdy-turbo .note-preview-frame{
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}
body.sdy-turbo *,
body.sdy-turbo *::before,
body.sdy-turbo *::after{
  animation-duration:0s!important;
  animation-delay:0s!important;
  transition-duration:0s!important;
  transition-delay:0s!important;
}
body.sdy-turbo .note-card,
body.sdy-turbo .folder-card,
body.sdy-turbo .add-card,
body.sdy-turbo .modal-box,
body.sdy-turbo .fcard-win,
body.sdy-turbo .mp,
body.sdy-turbo .mpb,
body.sdy-turbo .ai-hist,
body.sdy-turbo .ai-say{
  box-shadow:none!important;
  text-shadow:none!important;
}
body.sdy-turbo .note-card:hover,
body.sdy-turbo .folder-card:hover,
body.sdy-turbo .add-card:hover,
body.sdy-turbo .tool-btn:hover,
body.sdy-turbo .tool-btn:active,
body.sdy-turbo .ctx-item:hover,
body.sdy-turbo .ctx-item:active{
  transform:none!important;
}
body.sdy-turbo .paper,
body.sdy-turbo .page-wrap{will-change:auto!important;}

/* ════════════════════════════════════════════════════════════════════
   14.39.0 · 버그 일지 — 설정 [보기] 목록 (항목마다 X 로 그 기록만 지운다)
   ════════════════════════════════════════════════════════════════════ */
.buglog-item{padding:12px 6px;border-bottom:1px solid var(--border);}
.buglog-item:last-child{border-bottom:none;}
.buglog-head{display:flex;align-items:flex-start;gap:9px;}
.buglog-head>i{flex:none;font-size:17px;color:#e74c3c;margin-top:2px;}
.buglog-title{flex:1;font-size:14px;font-weight:700;color:var(--text1);line-height:1.45;word-break:break-word;padding-top:1px;}
.buglog-x{flex:none;width:26px;height:26px;display:flex;align-items:center;justify-content:center;
  border:1px solid transparent;border-radius:5px;background:transparent;color:var(--text3);
  font-size:15px;cursor:pointer;padding:0;margin:-2px -2px 0 0;}
.buglog-x:hover{border-color:rgba(231,76,60,.35);color:#e74c3c;background:rgba(231,76,60,.07);}
.buglog-meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text3);margin:2px 0 6px 26px;}
.buglog-who{color:var(--accent);}
.buglog-ver{opacity:.75;}
.buglog-body{margin:2px 0 2px 10px;padding:6px 4px 8px 13px;border-left:2px solid var(--border);
  background:var(--bg2);border-radius:0 8px 8px 0;}
.buglog-line{display:flex;gap:8px;font-size:12.5px;line-height:1.7;color:var(--text1);word-break:break-word;}
.buglog-line b{flex:none;min-width:66px;font-weight:600;color:var(--accent);}
.buglog-raw{margin:6px 0 0 26px;font-size:11.5px;color:var(--text3);white-space:pre-wrap;word-break:break-word;line-height:1.6;}
@media (max-width:560px){
  .buglog-line{flex-direction:column;gap:0;}
  .buglog-line b{min-width:0;}
}



/* ================================================================
   14.48 · PRO 테마 — '워크(Work)' 밝은 전문 디자인 (기본 테마)
   ────────────────────────────────────────────────────────────────
   설정의 '테마' 행에서 고른다. '프로'(기본값) / '클래식'(기존 라이트).
   루트에는 data-theme + .theme-pro(.theme-classic)가 붙는다.

   14.48 · 전면 재설계 — 예전의 '프리미엄 다크' 프로를 통째로 갈아엎었다.
   장난기 있는 클래식과 확연히 다른 '전문 업무용' 밝은 디자인:
   · 냉정한 중립 회색 계열 + 하나의 기업용 블루(#2563EB)만 포인트
   · 오로라·무지개 그라데이션·유리 번들기는 없음 — 단정한 표면 +
     1px 헤어라인 + 절제된 그림자
   · 종이는 항상 하얀색(#FFFFFF) — 밝은 회색 캔버스 위에 문서처럼
   · 배경화면(벽지) 기능은 프로에서 제공하지 않는다 (클래식 전용)
   · .dark 별칭 클래스는 더 이상 프로에 붙지 않는다 (밝은 테마).
     파일 곳곳의 .dark 규칙은 프로에서 동작하지 않으며, 프로는
     기본(라이트) 규칙 + 아래 html.theme-pro 오버라이드로 이루어진다.
   위치: 17.0 모바일 최종 블록 직전 (html.theme-pro 접두라 특이도
   0,2,1+이고 순서와 무관하게 기본·모바일 규칙을 이긴다. 모바일 블록과
   겹치는 border-radius 값은 모바일과 맞춰 두었다.)
   ================================================================ */

/* ── 14.48-A · 테마 선택 UI (설정창 '테마' 행) — 두 테마 공용 ── */
.set-row.theme-row{flex-direction:column;align-items:stretch;gap:10px;}
.set-row.theme-row .set-label ~ *{margin-left:0;}
/* 23.0 · 테마·강조색 기능 비활성 — 화면은 '기본' 하나뿐이라 설정에서도 감춘다.
   (기능 자체를 없애지는 않는다: 저장된 값·동기화 규칙은 그대로 두고 보이는 입구만 닫는다) */
.set-row.theme-row,.set-row.accent-row{display:none!important;}
.theme-picks{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.theme-pick{
  appearance:none;-webkit-appearance:none;text-align:left;cursor:pointer;
  display:flex;flex-direction:column;gap:7px;padding:11px 12px 10px;
  border:1.5px solid var(--border);border-radius:13px;
  background:var(--bg2);color:var(--text1);
  transition:border-color .18s,box-shadow .18s,transform .18s,background .18s;
}
.theme-pick:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 55%,var(--border));}
.theme-pick.on{
  border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 9%,var(--bg2));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent),
             0 8px 22px -10px color-mix(in srgb,var(--accent) 45%,transparent);
}
.tp-swatch{display:flex;align-items:flex-end;gap:3px;height:30px;padding:6px;
  border-radius:9px;border:1px solid var(--border);overflow:hidden;}
.tp-swatch i{display:block;flex:1;border-radius:2.5px;min-width:0;}
/* 프로 미리보기 — 밝은 중립 + 흰 표면 + 블루 포인트 */
.tp-swatch.pro{background:#F1F3F7;border-color:#DFE3EB;}
.tp-swatch.pro i:nth-child(1){height:58%;background:#DFE3EB;}
.tp-swatch.pro i:nth-child(2){height:100%;background:#FFFFFF;border:1px solid #E3E7EF;}
.tp-swatch.pro i:nth-child(3){height:74%;background:linear-gradient(180deg,#1B4AA0,#14366E);}
.tp-swatch.classic{background:#FFFFFF;border-color:#E2E5EE;}
.tp-swatch.classic i:nth-child(1){height:58%;background:#DDE1EC;}
.tp-swatch.classic i:nth-child(2){height:100%;background:linear-gradient(180deg,#4F6EF7,#8B5CF6);}
.tp-swatch.classic i:nth-child(3){height:74%;background:#F3F4F9;border:1px solid #E2E5EE;}
.tp-name{display:flex;align-items:center;gap:6px;font-size:13.5px;font-weight:800;letter-spacing:-.01em;}
.tp-badge{font-style:normal;font-size:9.5px;font-weight:800;letter-spacing:.05em;
  padding:2px 6px;border-radius:99px;color:#fff;background:var(--grad);
  box-shadow:0 2px 8px color-mix(in srgb,var(--accent) 40%,transparent);}
.tp-desc{font-size:11px;color:var(--text3);line-height:1.4;}
@media(max-width:380px){.theme-picks{grid-template-columns:1fr;}}

/* ── 14.48-B · PRO 색상·표면 토큰 ── */
html.theme-pro{
  --bg:#F4F5F8;--bg2:#ECEEF3;--card:#FFFFFF;
  --text1:#0F172A;--text2:#334155;--text3:#64748B;
  --border:#CBD5E1;
  --accent:#14366E;--accent2:#0F2A5A;
  --shadow:0 1px 2px rgba(23,28,41,.06);
  --shadow-lg:0 16px 40px -12px rgba(23,28,41,.20);
  --line:#CBD5E1;--dot:#94A3B8;
  --grad:linear-gradient(135deg,#14366E,#0F2A5A);
  --g-blur:14px;--g-blur-lg:20px;
  --g-fill:rgba(255,255,255,.80);
  --g-fill-strong:rgba(255,255,255,.94);
  --g-in:rgba(23,28,41,.05);
  --g-brd:rgba(23,28,41,.12);
  --g-line:rgba(23,28,41,.09);
  --g-hi:inset 0 1px 0 rgba(255,255,255,.95);
  --g-shadow:0 1px 2px rgba(23,28,41,.07),0 14px 34px -14px rgba(23,28,41,.16);
  --g-shadow-lg:0 2px 8px rgba(23,28,41,.09),0 30px 70px -24px rgba(23,28,41,.26);
  --pro-ring:0 0 0 1px color-mix(in srgb,var(--accent) 30%,transparent),
             0 10px 28px -10px color-mix(in srgb,var(--accent) 32%,transparent);
  color-scheme:light;
}
html.theme-classic{color-scheme:light;}

/* ── 14.48-C · 배경 — 오로라 없이 단평면 ── */
html.theme-pro #sdyAmbient{background:#F4F5F8;}
html.theme-pro #sdyAmbient::before,
html.theme-pro #sdyAmbient::after{display:none;}
html.theme-pro #sdyAmbient .ga{display:none;}

/* ── 14.48-D · 헤더·브랜드·검색·링크바 ── */
html.theme-pro .header{
  background:var(--logo-paper);
  border-bottom:1px solid var(--border);
  box-shadow:0 1px 2px rgba(23,28,41,.04);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
}
html.theme-pro .header::after{display:none;}   /* 그라데이션 헤어라인 제거 */
/* 브랜드 — 장난스러운 손글씨 대신 단정한 산세리프 */
html.theme-pro .app-brand h1{
  font-family:'Jua','Pretendard Variable',Pretendard,-apple-system,'Segoe UI',sans-serif;
  font-weight:800;font-size:18px;letter-spacing:-.02em;
  background:none;color:#171C26;-webkit-text-fill-color:currentColor;
  text-shadow:none;
}
/* 프로: 옆 정사각 아이콘(30px)과 같은 높이 + 같은 광학 보정 */
html.theme-pro .app-brand h1 .brand-wordmark{height:30px;transform:translateY(2px);}
html.theme-pro .app-brand .logo-dot{
  background:var(--logo-paper);
  border:none;
  box-shadow:none;
}
html.theme-pro .header #searchInput{
  background:#F1F3F7!important;
  border-color:#DFE3EB!important;
  color:var(--text1);
}
html.theme-pro .header #searchInput::placeholder{color:#98A1B3;}
html.theme-pro .header #searchInput:focus{
  border-color:color-mix(in srgb,var(--accent) 55%,#fff)!important;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)!important;
  background:#FFFFFF!important;
}
html.theme-pro .header .tool-btn:hover{
  background:rgba(23,28,41,.05);
  box-shadow:none;
}
html.theme-pro .link-bar{
  background:#FFFFFF;border:1px solid var(--border);
  box-shadow:0 1px 2px rgba(23,28,41,.05);
}
html.theme-pro .link-chip{background:#F4F5F8;border-color:var(--border);}
html.theme-pro .link-chip:hover{
  border-color:color-mix(in srgb,var(--accent) 45%,var(--border));
  background:color-mix(in srgb,var(--accent) 7%,#FFFFFF);
  color:var(--text1);box-shadow:none;
}
html.theme-pro .breadcrumb button{color:var(--accent);font-weight:700;}
html.theme-pro .breadcrumb button:hover{background:#ECEEF3;}

/* ── 14.48-E · 홈 · 카드 ── */
html.theme-pro .home-section-title{color:#171C26;font-weight:800;letter-spacing:-.01em;}
html.theme-pro .home-section-title i{
  background:color-mix(in srgb,var(--accent) 10%,#FFFFFF);
  color:var(--accent);
  width:26px;height:26px;border-radius:8px;font-size:14px;
  display:inline-flex;align-items:center;justify-content:center;flex:none;
  border:1px solid color-mix(in srgb,var(--accent) 22%,transparent);
  box-shadow:none;
}
html.theme-pro .recent-title{color:var(--text2);}
html.theme-pro .home-add-note{
  background:#FFFFFF;
  border:1px solid var(--border);color:var(--text2);
  box-shadow:0 1px 2px rgba(23,28,41,.05);
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
html.theme-pro .home-add-note:hover,
html.theme-pro .home-stack-upper.fanned .home-add-note{
  color:var(--accent);
  border-color:color-mix(in srgb,var(--accent) 55%,var(--border));
  background:color-mix(in srgb,var(--accent) 4%,#FFFFFF);
  box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 14%,transparent);
}
html.theme-pro .home-add-icon{
  background:#FFFFFF;color:var(--accent);
  border:1px solid color-mix(in srgb,var(--accent) 30%,var(--border));
  box-shadow:none;
}
html.theme-pro .home-add-note:hover .home-add-icon,
html.theme-pro .home-stack-upper.fanned .home-add-icon{
  color:#fff!important;background:var(--accent)!important;border-color:var(--accent)!important;
}
/* 카드 — 흰 표면 + 헤어라인 + 절제된 그림자 (유리 번들기 없음) */
html.theme-pro .note-card,html.theme-pro .folder-card{
  background:#FFFFFF;
  border:1px solid var(--border);
  box-shadow:0 1px 2px rgba(23,28,41,.05);
}
html.theme-pro .note-card::after{display:none;}
html.theme-pro .note-card-name{background:#FFFFFF;border-top:1px solid var(--border);}
html.theme-pro .folder-thumb{background:#F4F5F8;}
html.theme-pro .folder-thumb>i{filter:none;opacity:.85;}
html.theme-pro .add-card{
  border:1px dashed #C9CFDB;background:transparent;color:var(--text3);
}
/* 15.14.1 · 타일 숨김 규칙은 아래 14.64 셸 블록(:has(> .pro-home) 스코프)로 갔다 */
html.theme-pro .add-card:hover{
  border-color:color-mix(in srgb,var(--accent) 60%,var(--border));
  color:var(--accent);
  background:color-mix(in srgb,var(--accent) 4%,transparent);
}
html.theme-pro .pin-badge,html.theme-pro .card-menu,
html.theme-pro .folder-lock,html.theme-pro .unlock-badge{
  background:#FFFFFF;border:1px solid var(--border);
  box-shadow:0 1px 3px rgba(23,28,41,.10);
}
html.theme-pro .emoji-badge:hover{background:rgba(23,28,41,.06);}
/* 14.49 · 호버 시 위로 떠오르는 모션은 프로에서 없음 — 테두리·그림자만 */
@media(hover:hover){
  html.theme-pro .note-card:hover,html.theme-pro .folder-card:hover{
    transform:none;
    border-color:color-mix(in srgb,var(--accent) 45%,var(--border));
    box-shadow:0 10px 24px -10px rgba(23,28,41,.18),
               0 0 0 1px color-mix(in srgb,var(--accent) 12%,transparent);
  }
}
@media(hover:none){
  html.theme-pro .note-card:hover,html.theme-pro .folder-card:hover,
  html.theme-pro .add-card:hover,html.theme-pro .home-add-note:hover{transform:none;}
}

/* ── 14.48-F · 에디터 ── */
html.theme-pro .editor-toolbar{
  background:transparent;
  border-bottom:0;
  box-shadow:none;
}
html.theme-pro .tb-group{
  background:#F2F4F8;
  border:1px solid #E4E8F0;
  border-radius:10px;
  padding:2px;
}
html.theme-pro .tool-btn:hover{
  background:rgba(23,28,41,.06);color:var(--text1);
}
html.theme-pro .tool-btn.active{
  background:var(--accent);color:#fff;
  box-shadow:0 1px 3px color-mix(in srgb,var(--accent) 45%,transparent);
}
html.theme-pro .tool-btn.core-tool{
  color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,transparent);
}
html.theme-pro .tool-sep{background:var(--border);}
html.theme-pro .font-btn{
  background:#FFFFFF;border:1px solid #E4E8F0;border-radius:8px;color:var(--text1);
}
html.theme-pro .font-btn:hover{background:#F7F8FB;}
html.theme-pro .pg-nav{
  background:#F2F4F8;border:1px solid #E4E8F0;
}
html.theme-pro #edTitle{color:var(--text1);}
html.theme-pro #edTitle:hover{background:#F4F5F8;}
html.theme-pro #edTitle:focus{
  background:#FFFFFF;
  border-color:color-mix(in srgb,var(--accent) 55%,#fff);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent);
}
html.theme-pro #saveState{color:var(--text3);font-weight:600;}
html.theme-pro #fsInput{
  background:#FFFFFF;border-color:#E4E8F0;color:var(--text1);
}
/* 종이 — 항상 하얀색. 밝은 회색 캔버스 위에 문서처럼.
   14.72.6 · 노트 바깥 주변 배경을 더 어둡게 — 클래식과 같은 캔버스 토큰 사용. */
html.theme-pro .editor-body{background:var(--editor-canvas)!important;}
html.theme-pro .paper{
  background:#FFFFFF;
  outline:1px solid #D8DDE6;
  box-shadow:0 1px 3px rgba(23,28,41,.07),0 10px 28px -10px rgba(23,28,41,.14)!important;
}
html.theme-pro .paper.focused{
  outline:calc(2.5px / var(--pz,1)) solid var(--accent);
  outline-offset:calc(2px / var(--pz,1));
  box-shadow:0 0 0 calc(6px / var(--pz,1)) color-mix(in srgb,var(--accent) 14%,transparent),
             0 14px 34px -10px rgba(23,28,41,.16)!important;
}
html.theme-pro .page-label{color:var(--text3);}
html.theme-pro .page-wrap.focused .page-label{color:var(--accent);font-weight:700;}
html.theme-pro .add-page-zone{
  border:1.5px dashed #C9CFDB;color:var(--text3);background:rgba(255,255,255,.55);
}
html.theme-pro .add-page-zone:hover,html.theme-pro .add-page-zone.near{
  border-color:color-mix(in srgb,var(--accent) 60%,var(--border));
  color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,#FFFFFF);
}
html.theme-pro .side-panel{background:#FFFFFF;border-right-color:var(--border);}
html.theme-pro .sp-sec{color:var(--text2);}
html.theme-pro .sp-item:hover,html.theme-pro .sp-sec:hover{background:#F4F5F8;}
html.theme-pro .more-tabs button.on{
  background:#F2F4F8;color:var(--text1);
  box-shadow:none;
}
/* 떠 있는 도구막대 — 흰 표면 + 헤어라인 */
html.theme-pro .tbl-bar,html.theme-pro .find-bar,html.theme-pro .wf-bar{
  background:rgba(255,255,255,.96);
  border:1px solid var(--border);
  border-radius:14px; /* 모바일 최종 블록과 같은 값 — 폰에서도 동일 */
  box-shadow:var(--g-shadow-lg);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
}
html.theme-pro .tbl-bar button:hover,html.theme-pro .find-bar button:hover,
html.theme-pro .tbl-color:hover{background:rgba(23,28,41,.05);color:var(--text1);}
html.theme-pro .select-bar{
  background:rgba(255,255,255,.96);border:1px solid var(--border);
  border-radius:18px; /* 모바일 최종 블록과 같은 값 — 폰에서도 동일 */
  box-shadow:var(--g-shadow-lg);
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
}

/* ── 14.48-G · 모달·설정·입력 ── */
html.theme-pro .modal-bg{background:rgba(23,28,41,.44);backdrop-filter:blur(3px);}
html.theme-pro .modal-box:not(.cards-box){
  box-shadow:0 1px 2px rgba(23,28,41,.06),0 24px 64px -16px rgba(23,28,41,.30);
}
@media (min-width:641px){
  html.theme-pro .modal-box:not(.cards-box){border-radius:14px;}
}
html.theme-pro .modal-box:not(.cards-box) h3{color:#171C26;letter-spacing:-.01em;}
html.theme-pro .set-row select,
html.theme-pro .set-row input[type=number],
html.theme-pro .set-row input[type=text],
html.theme-pro .modal-box:not(.cards-box) input:not([type=range]):not([type=checkbox]):not([type=file]),
html.theme-pro .modal-box:not(.cards-box) select,
html.theme-pro .modal-box:not(.cards-box) textarea{
  background:#F6F7FA;
  border-color:#DFE3EB;
  color:var(--text1);
}
html.theme-pro .set-row select:focus,
html.theme-pro .modal-box:not(.cards-box) input:focus,
html.theme-pro .modal-box:not(.cards-box) select:focus,
html.theme-pro .modal-box:not(.cards-box) textarea:focus{
  border-color:color-mix(in srgb,var(--accent) 55%,#fff);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 13%,transparent);
  outline:none;
}
/* 14.48 · 배경화면(벽지)은 클래식 전용 기능 — 프로에서는 행 자체가 없다 */
html.theme-pro #setRowWall{display:none!important;}
html.theme-pro .size-preset-card{background:#F6F7FA;border-color:var(--border);}
html.theme-pro .size-preset-card:hover{
  box-shadow:var(--pro-ring);
  border-color:color-mix(in srgb,var(--accent) 40%,var(--border));
}
html.theme-pro .trash-item button:hover{box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 30%,transparent);}
html.theme-pro .import-btn:hover{
  border-color:color-mix(in srgb,var(--accent) 55%,var(--border));color:var(--accent);
}
html.theme-pro .vd-ic:hover{background:rgba(23,28,41,.05);}

/* ── 14.48-H · 메뉴·팝오버 ── */
html.theme-pro .ctx-menu{
  box-shadow:0 12px 34px -8px rgba(23,28,41,.22),0 0 0 1px rgba(23,28,41,.04);
}
html.theme-pro .ctx-item:hover{background:color-mix(in srgb,var(--accent) 7%,#F4F5F8);}
html.theme-pro .srv-pop,html.theme-pro .notif-pop,html.theme-pro .more-panel,
html.theme-pro .mp-list,html.theme-pro #plPickPop,html.theme-pro #mpVolPop,
html.theme-pro #musicListPop{
  box-shadow:var(--g-hi),var(--g-shadow-lg),0 0 0 1px rgba(23,28,41,.05);
}
html.theme-pro .notif-item:hover{background:rgba(23,28,41,.04);}

/* ── 14.48-I · 음악 ── */
html.theme-pro .mp.mp-bar{
  box-shadow:var(--g-hi),var(--g-shadow-lg),0 0 0 1px rgba(23,28,41,.05);
}
html.theme-pro #mpFill{
  background:var(--accent);
  box-shadow:none;
}
html.theme-pro .mp-knob{
  background:#fff;border-color:var(--accent);
  box-shadow:0 1px 3px rgba(23,28,41,.25);
}
html.theme-pro .mp-prog{background:rgba(23,28,41,.08);}
html.theme-pro .mp.mp-bar .mp-prog{background:rgba(23,28,41,.08);}
html.theme-pro .mp-buf{background:rgba(23,28,41,.16);}
html.theme-pro #mpReopen:hover{box-shadow:var(--g-hi),var(--g-shadow-lg),var(--pro-ring);}
html.theme-pro .mp-li:hover,html.theme-pro .mpb-li:hover{
  background:color-mix(in srgb,var(--accent) 6%,transparent);
}
html.theme-pro .mp-li.on,html.theme-pro .mpb-li.on{
  background:color-mix(in srgb,var(--accent) 10%,transparent);
}

/* ── 14.48-J · 스플래시·로딩 ── */
html.theme-pro #splash{
  background:var(--logo-paper)!important;
}
html.theme-pro #splash .sp-logo{
  background:var(--logo-paper)!important;
  box-shadow:none!important;
  border:none!important;
}
html.theme-pro #splash .sp-title{
  background:none;color:#171C26;-webkit-text-fill-color:currentColor;
}
html.theme-pro #splash .sp-bar{background:#E6E9F0;}
html.theme-pro #splash .sp-bar i{background:var(--accent);}
html.theme-pro #splash .sp-msg{color:var(--text3);}

/* ── 14.48-K · 스크롤·포커스·선택 ── */
html.theme-pro ::selection{
  background:color-mix(in srgb,var(--accent) 20%,transparent);
  color:inherit;
}
html.theme-pro *::-webkit-scrollbar-thumb{background:#D2D7E1;border-color:var(--bg);}
html.theme-pro *::-webkit-scrollbar-thumb:hover{background:#BFC6D4;}
html.theme-pro *{scrollbar-color:#D2D7E1 transparent;}
html.theme-pro input::placeholder,html.theme-pro textarea::placeholder{color:#9AA3B5;}
html.theme-pro button:focus-visible,html.theme-pro input:focus-visible,
html.theme-pro select:focus-visible{
  outline:2px solid color-mix(in srgb,var(--accent) 70%,transparent);outline-offset:2px;
}
html.theme-pro .find-hit{background:rgba(250,204,21,.45);}
@media (prefers-reduced-motion:reduce){
  html.theme-pro .note-card::after{transition:none;}
}


/* ── 14.49-L · PRO 앱 셸 — 사이드바 + 상단바 (어도비 계열 전문 구조) ── */
/* 클래식: 셸 래퍼 display:contents + 사이드바 숨김 → 레이아웃 기존과 동일 */
html.theme-classic #proShell{display:contents;}
html.theme-classic #proSide{display:none!important;}
html.theme-pro #proShell{display:block;}
/* 사이드바 — 캔버스(#F4F5F8)보다 살짝 밝은 화이트 + 헤어라인.
   z:90 → 에디터(100)·더보기시트(1400)·모달(1900)·집중(2100)보다 아래 */
html.theme-pro #proSide{
  position:fixed;top:0;left:0;bottom:0;width:280px;z-index:90;
  display:flex;flex-direction:column;min-height:0;
  background:var(--logo-paper);
  font-family:'Jua','Pretendard Variable',Pretendard,-apple-system,'Segoe UI',sans-serif;
}
/* 14.61 · #mainView 밀기 — static 요소엔 left 가 무효라 예전엔 사이드바(248px)
   밑으로 홈 내용이 깔려 '첫 노트가 사이드바에 가려지는' 버그가 있었다.
   margin-left 로 실제 흐름에서 밀어 낸다 (데스크톱 280px, 좁은 화면 레일 60px).
   14.64 · 접기 기능을 없애 폭은 항상 280px(레일 구간만 60px)이다. */
@media (min-width:1024px){
  html.theme-pro #mainView{margin-left:280px!important;}
}
/* 641~1023(레일) — #mainView 가 fixed 로 되는 ≤640/짧은-coarse 폰에선 margin 0
   (inset:0 + left:60px 가 이미 밀어 준다). 그 사이 태블릿·좁은 창만 margin. */
@media (min-width:641px) and (max-width:1023px){
  html.theme-pro #mainView{margin-left:60px!important;}
}
html.theme-pro #mainView{left:280px!important;}
/* 브랜드 — 프로에선 헤더가 아닌 사이드바 상단 */
html.theme-pro .pro-brand{padding:20px 12px 14px;display:flex;flex-direction:column;align-items:center;text-align:center;}
html.theme-pro .pro-brand .app-brand{margin-left:0!important;gap:9px;justify-content:center;}
html.theme-pro .pro-brand .logo-dot{width:30px;height:30px;font-size:16px;}
html.theme-pro .pro-brand .app-brand h1 .brand-wordmark{height:30px;transform:translateY(2px);}
html.theme-pro .pro-brand h1{
  font-size:14.5px;letter-spacing:-.015em;max-width:180px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  line-height:0;margin:0;display:flex;align-items:center;
}
html.theme-pro .pro-brand .logo-dot:hover,
html.theme-pro .pro-brand .logo-dot:focus-visible{transform:none!important;}
html.theme-pro .pro-brand .logo-dot:hover + h1,
html.theme-pro .pro-brand .logo-dot:focus-visible + h1{transform:none!important;}
/* 17.4 호버-펼침(데스크톱)은 사이드바에서 끌고 — 타이틀은 항상 보인다 */
@media (hover:hover) and (min-width:901px){
  html.theme-pro .pro-brand .app-brand h1{
    max-width:150px!important;opacity:1!important;transform:none!important;
    pointer-events:auto!important;
  }
}
/* 웹 바로가기 — 사이드바에서 세로 미니 리스트 */
html.theme-pro .pro-brand .link-bar{
  display:flex;flex-wrap:wrap;gap:4px;border:none;box-shadow:none;
  background:transparent;padding:0;margin-top:2px;
}
html.theme-pro .pro-brand .link-chip{
  border-radius:7px;padding:4px 8px;font-size:11.5px;max-width:100%;
  background:#F4F5F8;border:1px solid var(--border);box-shadow:none;
}
html.theme-pro .pro-brand .link-chip:hover{transform:none;}
/* 내비게이션 */
html.theme-pro .pro-nav{display:flex;flex-direction:column;gap:2px;padding:8px 10px 4px;}
html.theme-pro .pro-nav-item{
  display:flex;align-items:center;gap:10px;width:100%;
  padding:9px 12px;border-radius:9px;border:none;background:transparent;
  color:var(--text2);font-size:13.5px;font-weight:600;cursor:pointer;
  text-align:left;font-family:inherit;line-height:1.2;
}
html.theme-pro .pro-nav-item i{font-size:17px;width:20px;text-align:center;color:var(--text3);flex:none;}
html.theme-pro .pro-nav-item:hover{background:rgba(23,28,41,.05);color:var(--text1);}
html.theme-pro .pro-nav-item.on{
  background:color-mix(in srgb,var(--accent) 9%,transparent);
  color:var(--accent);font-weight:700;
}
html.theme-pro .pro-nav-item.on i{color:var(--accent);}
/* 폴더 목록 */
html.theme-pro .pro-folders-wrap{flex:1 1 auto;min-height:0;overflow-y:auto;padding:0 10px 8px;}
html.theme-pro .pro-folders-title{
  font-size:10.5px;font-weight:700;letter-spacing:.09em;color:var(--text3);
  padding:12px 8px 5px;text-transform:uppercase;
}
html.theme-pro .pro-fold-item{
  display:flex;align-items:center;gap:9px;width:100%;padding:7px 10px;margin-bottom:1px;
  border-radius:8px;border:none;background:transparent;color:var(--text2);
  font-size:13px;font-weight:500;cursor:pointer;text-align:left;
  font-family:inherit;line-height:1.3;
}
html.theme-pro .pro-fold-item i{font-size:15px;flex:none;}
html.theme-pro .pro-fold-item:hover{background:rgba(23,28,41,.05);color:var(--text1);}
html.theme-pro .pro-fold-item.on{
  background:color-mix(in srgb,var(--accent) 9%,transparent);
  color:var(--accent);font-weight:600;
}
html.theme-pro .pro-fold-item.drop{
  background:rgba(79,110,247,.12)!important;
  color:var(--accent)!important;
  box-shadow:inset 0 0 0 1px var(--accent);
  transform:scale(1.02);
}
html.theme-pro .pf-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
html.theme-pro .pf-count{
  font-size:10.5px;font-weight:600;color:var(--text3);
  background:#F1F3F7;border:1px solid var(--border);border-radius:99px;
  padding:1px 7px;flex:none;
}
html.theme-pro .pro-fold-empty{font-size:12px;color:var(--text3);padding:6px 10px;}
html.theme-pro .pro-side-bottom{
  display:flex;flex-direction:column;gap:2px;
  padding:8px 10px 12px;border-top:1px solid var(--border);
}
/* 상단바 — 헤더가 컨텍스트 바로. 브랜드는 나가고 브레드크럼·검색·액션만 */
html.theme-pro .header .w-full{gap:10px;}
html.theme-pro .hdr-right{margin-left:auto;}
html.theme-pro .header .breadcrumb{margin-right:auto;min-width:0;}
html.theme-pro .breadcrumb button{border-radius:7px;}
html.theme-pro #searchInput{width:240px!important;height:36px!important;border-radius:9px!important;}

/* ── 14.49-M · PRO 홈 — 스택·펼침 없는 평평한 전문 그리드 ── */
html.theme-pro #noteGrid{display:block;padding:0 4px;}
html.theme-pro .pro-home-bar{display:flex;align-items:center;gap:8px;margin:2px 2px 8px;}
html.theme-pro .pro-home-bar .home-section-title{margin:0;}
html.theme-pro .pro-home-count{font-size:12.5px;color:var(--text3);font-weight:600;white-space:nowrap;}
/* 15.19 · '+새 노트' 상단 알약은 폐지(새 노트는 오른쪽 아래 FAB 하나) —
   도구줄에는 폴더 만들기 단추가 같은 자리에 들어온다(홈·폴더 화면 공용). */
html.theme-pro .pro-add-folder{
  margin-left:auto;display:inline-flex;align-items:center;gap:6px;
  padding:9px 16px;border-radius:9px;border:1px solid var(--accent);
  background:var(--accent);color:#fff;font-size:13.5px;font-weight:700;
  cursor:pointer;font-family:inherit;line-height:1.2;
  box-shadow:0 1px 2px color-mix(in srgb,var(--accent) 35%,transparent);
  transition:background .15s,border-color .15s;
}
html.theme-pro .pro-add-folder:hover{background:var(--accent2);border-color:var(--accent2);}
html.theme-pro .pro-add-folder:active{transform:scale(.98);}
html.theme-pro .pro-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:8px;}
html.theme-pro .pro-home-empty{
  grid-column:1/-1;display:flex;flex-direction:column;align-items:center;gap:10px;
  color:var(--text3);font-size:14px;padding:60px 0;text-align:center;
}
html.theme-pro .pro-home-empty i{font-size:34px;opacity:.5;}
/* 폴더 화면·검색(프로) — #noteGrid 자체가 균일 그리드가 된다 */
html.theme-pro #noteGrid:not(:has(> .pro-home)){
  display:grid;grid-template-columns:repeat(auto-fill,minmax(185px,1fr));gap:14px;
}
html.theme-pro #noteGrid .note-card,
html.theme-pro #noteGrid .folder-card,
html.theme-pro #noteGrid .add-card{
  width:auto!important;flex:0 0 auto!important;max-width:none!important;min-width:0;
  border-radius:12px;
}
html.theme-pro #noteGrid .note-preview,
html.theme-pro #noteGrid .folder-thumb{height:auto!important;aspect-ratio:4/5;}
html.theme-pro #noteGrid .add-card{height:auto!important;aspect-ratio:4/5;}

/* ── 14.49-N · 프로에서 호버 이동 모션 제거 (색·테두리만, 위아래 없음) ── */
html.theme-pro .note-card:hover,
html.theme-pro .folder-card:hover,
html.theme-pro .add-card:hover,
html.theme-pro .recent-row .note-card:hover,
html.theme-pro .home-add-note:hover,
html.theme-pro .home-stack-upper.fanned .home-add-note,
html.theme-pro .link-chip:hover,
html.theme-pro .link-add:hover,
html.theme-pro .tool-btn:hover,
html.theme-pro .size-preset-card:hover,
html.theme-pro .fc-mode:hover,
html.theme-pro .fc-preset:hover,
html.theme-pro .theme-pick:hover,
html.theme-pro .ctx-item:hover,
html.theme-pro .cd-reveal:hover,
html.theme-pro .fcard-win .cd-opt:hover,
html.theme-pro .fcard-win .cd-btn:hover,
html.theme-pro .fcard-win .fc-mode:hover,
html.theme-pro .fcard-win .cd-back:hover,
html.theme-pro .fcard-win.fcard-max .cd-deck:hover,
html.theme-pro .mp-otter:hover,
html.theme-pro .note-otter:hover,
html.theme-pro .ai-ask-action:hover,
html.theme-pro .app-brand .logo-dot:hover,
html.theme-pro .app-brand .logo-dot:focus-visible,
html.theme-pro #mpReopen:hover,
html.theme-pro #ypReopen:hover,
html.theme-pro .ypv-icon:hover,
html.theme-pro .ypv-gear:hover,
html.theme-pro .yp-reacts button:hover,
html.theme-pro .yp-tools button:hover,
html.theme-pro .yp-send:hover,
html.theme-pro .yp-emoji button:hover,
html.theme-pro .yp-react-row button:hover,
html.theme-pro .ypg-btn:hover{
  transform:none!important;
}
html.theme-pro .folder-card:hover .folder-thumb>i{transform:none!important;}

/* ── 14.49-O · 좁은 화면 — 60px 아이콘 레일 ── */
@media (max-width:1023px){
  html.theme-pro #proSide{width:60px;}
  html.theme-pro #mainView{left:60px!important;}
  html.theme-pro .pro-brand{padding:12px 0 10px;display:flex;justify-content:center;}
  html.theme-pro .pro-brand .app-brand{gap:0;}
  html.theme-pro .pro-brand h1{display:none;}
  html.theme-pro .pro-brand .link-bar{display:none;}
  html.theme-pro .pro-nav{padding:6px 8px 4px;}
  html.theme-pro .pro-nav-item{justify-content:center;padding:11px 0;gap:0;}
  html.theme-pro .pro-nav-item span{display:none;}
  html.theme-pro .pro-folders-wrap{display:none;}
  html.theme-pro .pro-side-bottom{padding:8px 8px 10px;}
}
/* ── 14.64 · 사이드바 폭은 하나 — 접기/펼치기 토글은 없앴다.
   데스크톱은 280px 고정, 좁은 화면(≤1023)은 60px 아이콘 레일(위 14.49-O 규칙).
   사용자 요청: "사이드바 접는 기능을 아예 빼버려 — 그냥 안 접히게."
   (#proSideToggle 버튼·window.toggleProSide·applyProCollapsed·localStorage
    proSideCollapsed 까지 함께 제거. 남아 있던 html.pro-collapsed 클래스는
    applyTheme 이 한 번 지운다 — CSS 에 이 클래스를 쓰는 규칙은 더 없다.) */

/* 프로 홈 모바일 (17.0 모바일 블록과 같은 폭 기준) */
@media (max-width:640px){
  html.theme-pro .pro-grid,
  html.theme-pro #noteGrid:not(:has(> .pro-home)){grid-template-columns:repeat(2,1fr);gap:10px;}
  html.theme-pro .pro-home-bar{flex-wrap:wrap;margin-bottom:10px;}
  html.theme-pro .pro-add-folder{margin-left:0;}
  html.theme-pro .pro-home-count{order:3;width:100%;}
}

/* ── 14.50-P · 음악 플레이어 — 유리(글래스) 없이 단정한 화이트 플랫 ── */
html.theme-pro .mp.mp-bar{
  background:#FFFFFF;
  border:1px solid var(--border);
  border-radius:14px;
  box-shadow:0 1px 2px rgba(23,28,41,.06),0 10px 30px -12px rgba(23,28,41,.18);
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
html.theme-pro .mp-xtra{
  background:#FFFFFF;border:1px solid var(--border);border-radius:12px;
  box-shadow:0 1px 2px rgba(23,28,41,.06),0 10px 24px -12px rgba(23,28,41,.16);
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
html.theme-pro #mpReopen{
  background:#FFFFFF;color:var(--accent);
  border:1px solid var(--border);
  box-shadow:0 1px 2px rgba(23,28,41,.08),0 8px 20px -8px rgba(23,28,41,.22);
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
/* 19.0 · 프로 테마에서 칩을 숨기는 건 '사이드바 음악 항목이 있는 화면'에서만.
   노트 편집기(에디터가 화면을 덮는 동안)엔 사이드바에 닿을 수 없으므로
   음악을 다시 여는 길로 칩이 꼭 필요하다. */
html.theme-pro:not(:has(#editorView.open)) #mpReopen{display:none!important;}
html.theme-pro #mpBig{
  background:rgba(255,255,255,.97)!important;
  border:1px solid var(--border)!important;
  box-shadow:0 1px 2px rgba(23,28,41,.06),0 24px 70px -18px rgba(23,28,41,.32)!important;
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
/* 사이드바를 끼고도 콘텐츠 영역 안으로 — 바·목록은 콘텐츠 중앙 정렬 (사이드바 280px → 절반 140px) */
html.theme-pro .mp.mp-bar{left:calc(50% + 140px);}
html.theme-pro .mp-list{left:calc(50% + 140px);}
@media (max-width:1023px){
  html.theme-pro .mp.mp-bar{left:calc(50% + 30px);}
  html.theme-pro .mp-list{left:calc(50% + 30px);}
}
/* 14.64 · 접기 기능 제거 — 폭이 하나뿐이라 위 140px(280/2) · 30px(60/2) 오프셋만 쓴다. */

/* ── 14.50-Q · 엽스코드 — 밝은 윈도우 프레임 + 채팅 존은 다크 유지 ── */
/* 전문가 앱이 다크 채팅/영상 컨텍스트를 밝은 크롬 안에 담는 방식(Zoom·Meet 같은) */
html.theme-pro #ypApp{
  background:#FFFFFF;
  border:1px solid var(--border);border-radius:14px;
  box-shadow:0 1px 2px rgba(23,28,41,.07),0 24px 60px -16px rgba(23,28,41,.3);
}
html.theme-pro .yp-head{background:#FFFFFF;border-bottom:1px solid var(--border);}
html.theme-pro .yp-head .yp-ttl{color:#171C26;}
html.theme-pro .yp-head button{color:var(--text3);}
html.theme-pro .yp-head button:hover{background:#F1F3F7;color:var(--text1);}
/* 배경음악 바 — 채팅 본체 위(밝은 존)에 앉으니 밝은 스트립 */
html.theme-pro .yp-bgm{
  background:rgba(244,245,248,.92);
  border-bottom:1px solid var(--border);
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
html.theme-pro .yp-bgm-meta b{color:var(--text1);}
html.theme-pro .yp-bgm-meta span{color:var(--text3);}
html.theme-pro .yp-bgm input[type=text]{
  background:#FFFFFF;border-color:var(--border);color:var(--text1);
}
html.theme-pro .yp-bgm input[type=text]:focus{border-color:var(--accent);}
html.theme-pro .yp-bgm input[type=text]::placeholder{color:#9AA3B5;}
html.theme-pro .yp-bgm input[type=range]{accent-color:var(--accent);}
html.theme-pro .ypv-icon,html.theme-pro .ypv-mute,
html.theme-pro .ypv-gear,html.theme-pro .ypv-join.off{
  background:#FFFFFF;border-color:var(--border);color:var(--text2);
}
html.theme-pro .ypv-icon:hover,html.theme-pro .ypv-mute:hover,
html.theme-pro .ypv-gear:hover{color:var(--text1);border-color:#C9CFDB;}
/* 채팅 본체 — 프레임과 같은 밝은 톤으로 통일 (다크 존 제거) */
html.theme-pro #ypApp .yp-body{background:#F1F3F7;}
html.theme-pro #ypApp .yp-body::-webkit-scrollbar-thumb{background:#D2D7E1;}
html.theme-pro #ypApp .yp-bub{
  background:#FFFFFF;border:1px solid #DFE3EB;color:#1E2532;
  box-shadow:0 1px 2px rgba(23,28,41,.05);
}
html.theme-pro #ypApp .yp-ava{background:#E5E8EF;color:var(--text3);border-color:var(--border);}
html.theme-pro #ypApp .yp-who{color:var(--text2);}
html.theme-pro #ypApp .yp-time{color:var(--text3);}
html.theme-pro #ypApp .yp-sys{background:#E8EBF1;color:var(--text2);border:1px solid var(--border);}
html.theme-pro #ypApp .yp-empty{color:var(--text3);}
html.theme-pro #ypApp .yp-empty b{color:var(--text2);}
html.theme-pro #ypApp .yp-file{background:#FFFFFF;border-color:var(--border);color:var(--text2);}
html.theme-pro #ypApp .yp-img{border:1px solid var(--border);box-shadow:0 1px 2px rgba(23,28,41,.05);}
html.theme-pro #ypApp .yp-stack{scrollbar-color:#D2D7E1 transparent;}
html.theme-pro .yp-line.me .yp-bub{
  background:var(--accent);border-color:transparent;color:#fff;
  box-shadow:0 3px 14px color-mix(in srgb,var(--accent) 30%,transparent);
}
/* 하단 입력 — 밝은 존 */
html.theme-pro .yp-foot{background:#FFFFFF;border-top:1px solid var(--border);}
html.theme-pro .yp-tools button{color:var(--text3);}
html.theme-pro .yp-tools button:hover{background:#F1F3F7;color:var(--accent);}
html.theme-pro .yp-input textarea{
  background:#F6F7FA;border-color:var(--border);color:var(--text1);
}
html.theme-pro .yp-input textarea:focus{
  border-color:var(--accent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 12%,transparent);
}
html.theme-pro .yp-input textarea::placeholder{color:#9AA3B5;}
html.theme-pro .yp-send{
  background:var(--accent);
  box-shadow:0 1px 2px color-mix(in srgb,var(--accent) 35%,transparent);
}
html.theme-pro .yp-send:hover{background:var(--accent2);}
/* 닫았을 때 떠 있는 엽스코드  — 유리 원반 → 단정한 화이트 원 */
html.theme-pro #ypReopen{
  background:#FFFFFF;color:var(--accent);
  border:1px solid var(--border);
  box-shadow:0 1px 2px rgba(23,28,41,.08),0 8px 20px -8px rgba(23,28,41,.22);
}
html.theme-pro #ypReopen svg{color:#FF7A45;}
/* 14.52-S · PRO 사이드바 엽스코드 — 떠 있던 칩을 품고, 기존 자리에서는 숨긴다.
   노트 편집기에서도 이 규칙은 그대로다. (15.56.3 · 편집기 빠른 메뉴의
   '앱 · 엽스코드' 칸은 사용자 요청으로 없앴다 — PRO 로 편집기 안에서 접으면
   홈으로 나와 사이드바 토글·도구 서랍으로 다시 연다.) */
html.theme-pro #ypReopen{display:none!important;}
html.theme-pro #proYpBtn{position:relative;}
html.theme-pro #proYpBtn .pro-yp-badges{position:absolute;right:8px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;align-items:flex-end;gap:3px;pointer-events:none;}
html.theme-pro #proYpBtn .pro-yp-bdg{min-width:18px;height:18px;border-radius:999px;display:none;align-items:center;justify-content:center;font-size:10.5px;font-weight:800;line-height:1;padding:0 5px;border:2px solid #FBFCFE;box-shadow:0 0 0 1px rgba(23,28,41,.06);gap:2px;white-space:nowrap;}
html.theme-pro #proYpBtn .pro-yp-bdg.voice{background:#22c55e;color:#052e16;box-shadow:0 0 0 2px #FBFCFE,0 0 10px rgba(34,197,94,.8);}
html.theme-pro #proYpBtn .pro-yp-bdg.dm{background:linear-gradient(135deg,#f43f5e,#ef4444);color:#fff;box-shadow:0 0 0 2px #FBFCFE;}
html.theme-pro #proYpBtn.shake{animation:ypShake .4s ease;}
/* 레일(60px)에서는 라벨이 없으니 배지를 버튼 우상단으로 */
@media (max-width:1023px){
  html.theme-pro #proYpBtn .pro-yp-badges{right:2px;top:2px;transform:none;gap:2px;}
  html.theme-pro #proYpBtn .pro-yp-bdg{font-size:9.5px;min-width:16px;height:16px;padding:0 4px;border-width:1.5px;}
}
/* 입장 게이트 — 프로 모달 톤 */
html.theme-pro #ypGate{background:rgba(23,28,41,.44);backdrop-filter:blur(3px);}
html.theme-pro .ypg-card{
  background:#FFFFFF;border:1px solid var(--border);border-radius:14px;
  box-shadow:0 1px 2px rgba(23,28,41,.06),0 24px 64px -16px rgba(23,28,41,.3);
}
html.theme-pro .ypg-ttl{color:#171C26;}
html.theme-pro .ypg-sub{color:var(--text3);}
html.theme-pro .ypg-btn{
  background:#F6F7FA;border-color:var(--border);color:var(--text1);
}
html.theme-pro .ypg-btn:hover{
  background:color-mix(in srgb,var(--accent) 6%,#FFFFFF);
  border-color:color-mix(in srgb,var(--accent) 40%,var(--border));
}
html.theme-pro .ypg-btn>i{color:var(--text3);}
html.theme-pro .ypg-btn em{color:var(--text3);}
html.theme-pro .ypg-btn.main{
  background:var(--accent);border-color:var(--accent);color:#fff;
  box-shadow:0 1px 2px color-mix(in srgb,var(--accent) 35%,transparent);
}
html.theme-pro .ypg-btn.main b{color:#fff;}
html.theme-pro .ypg-btn.main:hover{background:var(--accent2);border-color:var(--accent2);}
html.theme-pro .ypg-btn.main>i{color:#fff;}
html.theme-pro .ypg-btn.main em{color:rgba(255,255,255,.78);}
/* 14.52-S · PRO 엽스코드 패널은 사이드바 오른쪽에 도킹 — 음악 바와 같은 오프셋 (사이드바 280px + 12px) */
@media (min-width:641px){
  html.theme-pro #ypApp{left:292px!important;right:auto!important;bottom:14px!important;top:auto!important;}
}
@media (min-width:641px) and (max-width:1023px){
  html.theme-pro #ypApp{left:72px!important;width:min(370px,calc(100vw - 84px))!important;}
}

/* ── 14.51-R · 플로팅 요소 위치 — 프로 셸(사이드바/레일) 기준 재배치 ── */
/* 데스크톱: 선택막대를 콘텐츠 영역 중앙으로 (화면 중앙이 아닌) */
@media (min-width:641px){
  html.theme-pro .select-bar{left:calc(50% + 140px);}
}
/* 레일 폭대(641~1023, 60px 레일): 음악바·곡 목록이 레일 밑으로 빠지지 않게 */
@media (min-width:641px) and (max-width:1023px){
  html.theme-pro .mp.mp-bar{width:min(680px,calc(100vw - 84px));}
  html.theme-pro .mp-list{width:min(440px,calc(100vw - 84px));}
  html.theme-pro .select-bar{left:calc(50% + 30px);}
}
/* 모바일 시트(17.0 블록의 좌우 풀폭 시트) — 왼쪽 내비 존(레일 60px)을 피한다 */
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
  html.theme-pro .mp.mp-bar{left:72px!important;}
  html.theme-pro .mp-list{left:72px!important;width:calc(100vw - 72px)!important;max-width:none!important;}
  html.theme-pro .mpb{left:72px!important;}
  html.theme-pro #ypApp{left:72px!important;}
  html.theme-pro .select-bar{left:72px!important;}
  /* 같은 미디어라도 폭이 1024px 이상이면 280px 사이드바 쪽으로 */
  @media (min-width:1024px){
    html.theme-pro .mp.mp-bar{left:292px!important;}
    html.theme-pro .mp-list{left:292px!important;width:calc(100vw - 292px)!important;}
    html.theme-pro .mpb{left:292px!important;}
    html.theme-pro #ypApp{left:292px!important;}
    html.theme-pro .select-bar{left:292px!important;}
  }
}

/* ═══════════════════════════════════════════════════════════════
   14.52 · 프로 세팅 2탄 — 사각화(어도비 계열) + 남은 도구 플랫 마무리
   + 테마 이름: 기본(=구 프로) / 캐주얼(=구 클래식)
═══════════════════════════════════════════════════════════════ */

/* ── 14.52-P · 사각 모서리 — 어도비 계열 3단계 곡률 스케일 ──
   대형 표면 10px · 중간 8px · 컨트롤 6px · 알약/원형(99·50%)은 유지 */

/* 대형 — 창·모달·큰 패널 */
html.theme-pro .modal-box,
html.theme-pro .mpb,
html.theme-pro #ypApp,
html.theme-pro .sa-card, html.theme-pro .ypg-card,
html.theme-pro .mp-addpop, html.theme-pro .mp-tagm .box,
html.theme-pro .more-panel, html.theme-pro .srv-pop, html.theme-pro .notif-pop,
html.theme-pro .cd-hero, html.theme-pro .cd-face, html.theme-pro .cd-qq,
html.theme-pro .cd-reveal, html.theme-pro .cd-opt, html.theme-pro .cd-stat,
html.theme-pro .cd-tile,
html.theme-pro .fcard-win.fcard-max .cd-face, html.theme-pro .fcard-win.fcard-max .cd-tile,
html.theme-pro .otter-bubble,
html.theme-pro .mpb-now, html.theme-pro .mpb-playlist-card .mpb-album-art,
html.theme-pro .mp-eqpop,
html.theme-pro #welcomeToast,
html.theme-pro .rep-top{
  border-radius:10px;
}
html.theme-pro .ai-say{border-radius:10px 10px 10px 6px;}
html.theme-pro .ai-hist{border-radius:10px 10px 0 0;}
html.theme-pro .fcard-head, html.theme-pro .fcard-win.fcard-max .fcard-head{border-radius:10px 10px 0 0;}
html.theme-pro .fcard-win.fcard-max .cd-stage::before{border-radius:10px 10px 0 0;}
html.theme-pro #musicListPop.mp-list{border-radius:10px 10px 0 0;}
html.theme-pro #mpBig.mpb-fs .mpb-drawer, html.theme-pro #mpBig:fullscreen .mpb-drawer{border-radius:10px 10px 0 0;}

/* 중간 — 카드·목록·막대·메뉴 */
html.theme-pro .note-card, html.theme-pro .folder-card, html.theme-pro .add-card,
html.theme-pro #noteGrid .note-card, html.theme-pro #noteGrid .folder-card, html.theme-pro #noteGrid .add-card,
html.theme-pro .mp-list, html.theme-pro .mp.mp-bar, html.theme-pro .mp-xtra,
html.theme-pro .select-bar,
html.theme-pro .ctx-menu, html.theme-pro .mpctx,
html.theme-pro .toast,
html.theme-pro .tbl-bar, html.theme-pro .find-bar, html.theme-pro .wf-bar,
html.theme-pro .font-menu,
html.theme-pro .cd-deck, html.theme-pro .fcard-win.fcard-max .cd-deck,
html.theme-pro .cd-name, html.theme-pro .cd-prompt, html.theme-pro .cd-explain, html.theme-pro .cd-memory,
html.theme-pro .ana-kpi, html.theme-pro .ana-sec,
html.theme-pro .fc-x, html.theme-pro .fc-btn, html.theme-pro .fc-mode, html.theme-pro .fcard-win .fc-mode, html.theme-pro .fc-laps,
html.theme-pro .cd-tip-item, html.theme-pro .fcard-win .ex-item, html.theme-pro .fcard-win .cd-back,
html.theme-pro .mpb-cover, html.theme-pro .mpb-reco-art, html.theme-pro .mpb-album-art,
html.theme-pro .mpb-reco-current, html.theme-pro .mpb-random-hero, html.theme-pro .mpb-ctl button,
html.theme-pro .pl-mini, html.theme-pro #plPickPop,
html.theme-pro #musicListPop .mp-library-tools, html.theme-pro #musicListPop .mp-search,
html.theme-pro #musicListPop .mp-lbody, html.theme-pro #musicListPop .mp-discover,
html.theme-pro #musicListPop .mp-li, html.theme-pro #musicListPop .mp-pl, html.theme-pro #musicListPop .mp-plsub,
html.theme-pro .yp-bub, html.theme-pro .yp-img, html.theme-pro .yp-file, html.theme-pro .yp-draft-chip,
html.theme-pro .yp-emoji, html.theme-pro .yp-settings, html.theme-pro .yp-bgm-res,
html.theme-pro .sa-logo, html.theme-pro .sa-tabs, html.theme-pro .sa-sendbtn, html.theme-pro .sa-btn,
html.theme-pro .sa-pwbox, html.theme-pro .sa-me, html.theme-pro .sa-pwneed,
html.theme-pro .ypfr-item, html.theme-pro .ypfr-login,
html.theme-pro .theme-pick,
html.theme-pro #splash .sp-logo,
html.theme-pro .card-menu,
html.theme-pro .mp-otter, html.theme-pro .note-otter,
html.theme-pro .om-say,
html.theme-pro .ai-hist-item, html.theme-pro .ai-askbar-field, html.theme-pro .ai-askbar-field.multi,
html.theme-pro #welcomeToast .wc-ico,
html.theme-pro .notif-item, html.theme-pro .notif-ico,
html.theme-pro .mp-addpop .file, html.theme-pro .mp-addpop .ytcard,
html.theme-pro .mp-tagm .crow img, html.theme-pro .mp-rec-card img,
html.theme-pro .rep-w,
html.theme-pro .text-ghost, html.theme-pro .place-ghost,
html.theme-pro .header .tool-btn,
html.theme-pro #staleBar{
  border-radius:8px;
}

/* 컨트롤 — 버튼·입력·탭 */
html.theme-pro .more-grid button,
html.theme-pro .cd-btn, html.theme-pro .fcard-win .cd-btn,
html.theme-pro .cd-grade button, html.theme-pro .cd-grade2 button,
html.theme-pro .cd-testpick, html.theme-pro .cd-paste,
html.theme-pro .cd-listbar, html.theme-pro .cd-br,
html.theme-pro .sa-step input, html.theme-pro .sa-sent, html.theme-pro .sa-pwbox input,
html.theme-pro .ypfr-add input, html.theme-pro .ypfr-add button, html.theme-pro .ypfr-btn,
html.theme-pro .tp-swatch,
html.theme-pro .pg-nav,
html.theme-pro .tool-btn, html.theme-pro .tb-mid .tool-btn, html.theme-pro .editor-toolbar .tool-btn,
html.theme-pro .tb-group,
html.theme-pro .pro-nav-item, html.theme-pro .pro-fold-item, html.theme-pro .pro-add-folder,
html.theme-pro #searchInput,
html.theme-pro .breadcrumb button, html.theme-pro .pro-brand .link-chip,
html.theme-pro .home-section-title i, html.theme-pro .font-btn,
html.theme-pro .mpb-li, html.theme-pro .mpb-head button,
html.theme-pro .mpb-tabs button, html.theme-pro #mpBig .mpb-tabs button.mp-sortbtn, html.theme-pro .mp-sortbtn,
html.theme-pro .mp-emptybox button, html.theme-pro .mp-tagm .acts button,
html.theme-pro .mp-addpop input, html.theme-pro .mp-addpop .go, html.theme-pro .mp-addpop .status, html.theme-pro .mp-addpop .cookies,
html.theme-pro .latex-input, html.theme-pro .latex-preview,
html.theme-pro .tblsize-step, html.theme-pro .tblsize-actions button,
html.theme-pro .tg-label,
html.theme-pro .fc-lap, html.theme-pro .fc-custom input,
html.theme-pro .yp-emoji button,
html.theme-pro #staleBar button{
  border-radius:6px;
}

/* 기본이 !important 로 박아 둔 곡률 — 같은 강도로 이긴다 */
html.theme-pro .fcard-win, html.theme-pro .fcard-win.moved,
html.theme-pro .modal-bg .modal-box.cards-box{border-radius:10px!important;}
html.theme-pro #mpBig{border-radius:10px!important;}
html.theme-pro .ctx-menu.show{border-radius:10px!important;}
html.theme-pro .ctx-menu.show .ctx-item{border-radius:6px!important;}
html.theme-pro #uploadProg .modal-box, html.theme-pro #importProg .modal-box{border-radius:10px!important;}
html.theme-pro #mpBig.mpb-fs .mpb-head button, html.theme-pro #mpBig:fullscreen .mpb-head button{border-radius:6px!important;}
html.theme-pro .modal-box button{border-radius:6px!important;}
html.theme-pro .tb-group{border-radius:6px!important;}
html.theme-pro #searchInput{border-radius:6px!important;}

/* 모바일 시트 — 윗모서리 10 / 아랫모서리 정 */
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
  html.theme-pro .modal-box:not(.cards-box){border-radius:10px 10px 0 0!important;}
  html.theme-pro .fcard-win, html.theme-pro .fcard-win.moved,
  html.theme-pro .modal-bg .modal-box.cards-box{border-radius:10px 10px 0 0!important;}
  html.theme-pro .font-menu.show, html.theme-pro .color-popover.show, html.theme-pro .fav-pop.show,
  html.theme-pro .tint-pop.show, html.theme-pro .pin-pop.show{border-radius:10px 10px 0 0!important;}
}

/* ── 14.52-Q · 남은 도구 마무리 — 글래스(블러) 제거 + 플랫 화이트 ── */
/* 암기 카드 창 — 15.2 '영롱한 글래스'를 프로에선 플랫 화이트로 */
html.theme-pro .fcard-win{
  background:#FFFFFF!important;background-image:none!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  border:1px solid var(--border)!important;
  box-shadow:0 12px 44px rgba(23,28,38,.16),0 2px 8px rgba(23,28,38,.06)!important;
}
html.theme-pro .fcard-head{background:var(--bg2);border-bottom:1px solid var(--border);}
html.theme-pro .fcard-win .cd-opt, html.theme-pro .fcard-win .cd-stat, html.theme-pro .fcard-win .cd-btn,
html.theme-pro .fcard-win .fc-mode, html.theme-pro .fcard-win .cd-prog, html.theme-pro .fcard-win .cd-chip,
html.theme-pro .fcard-win .cd-streak, html.theme-pro .fcard-win .ex-item, html.theme-pro .fcard-win .cd-back,
html.theme-pro .fcard-win .cd-deck, html.theme-pro .cd-deck{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .fcard-win .cd-opt, html.theme-pro .fcard-win .cd-stat,
html.theme-pro .fcard-win .cd-tile, html.theme-pro .fcard-win.fcard-max .cd-tile{background:var(--bg2);}
html.theme-pro .fcard-win.fcard-max .cd-face{background:#FFFFFF;}
html.theme-pro .cd-face{background:#FFFFFF;}
html.theme-pro .cd-qq, html.theme-pro .cd-reveal{background:var(--bg2);}
html.theme-pro .cd-chip{background:#FFFFFF;}
/* 해돌이(AI) — 말풍선·질문칸·기록: 글래스 → 플랫 */
html.theme-pro .otter-bubble, html.theme-pro .otter-bubble-mini{
  background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;
  border:1px solid var(--border);
}
html.theme-pro .ai-say{
  background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;
  border:1px solid var(--border);box-shadow:0 14px 40px rgba(23,28,38,.14);
}
html.theme-pro .ai-hist{background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--border);}
html.theme-pro .ai-hist-item{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .ai-askbar-field, html.theme-pro .ai-askbar-field.multi{
  background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--border);
}
/* 15.26.5 · 해돌이 질문창을 항상 어두운 테마로 — 배경과 구분되게 */
html.theme-pro .ai-askbar-field, html.theme-pro .ai-askbar-field.multi{
  background:#1a1d24!important;border-color:rgba(255,255,255,.08)!important;
  box-shadow:0 2px 12px rgba(0,0,0,.25)!important;
}
html.theme-pro .ai-askbar-field:focus-within{
  border-color:var(--accent)!important;box-shadow:0 0 0 3px rgba(79,110,247,.2),0 2px 12px rgba(0,0,0,.25)!important;
}
html.theme-pro #aiQ{color:#e8eaed!important;}
html.theme-pro #aiQ::placeholder{color:rgba(255,255,255,.35)!important;}
html.theme-pro .ai-ask-action{background:transparent;border:none;}
/* 이퀄라이저 팝오버 · 집중 화면 · 기타 막대 */
html.theme-pro .mp-eqpop{background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--border);}
html.theme-pro #focusClock{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .fc-x, html.theme-pro .fc-btn, html.theme-pro .fc-preset{
  background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none;border-color:var(--border);
}
html.theme-pro .fc-laps{background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;border-color:var(--border);}
html.theme-pro .more-sheet{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro #sdyAuthWrap{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .modal-bg{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro #edLoading{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro #trProg{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro #staleBar{background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .present-bar{background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--border);color:var(--text1);}
html.theme-pro #welcomeToast{background:#FFFFFF;color:var(--text1);backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--border);}
html.theme-pro .page-count-badge{background:var(--bg2);backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .live-legend .ll-row{background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro .link-bar, html.theme-pro .link-chip, html.theme-pro .link-add{backdrop-filter:none;-webkit-backdrop-filter:none;}
/* 음악 — 리스트 시트 글래스·전체화면 드로어 블러 제거 */
html.theme-pro #musicListPop.mp-list{background:#FFFFFF;backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro #mpBig.mpb-fs .mpb-drawer-in, html.theme-pro #mpBig:fullscreen .mpb-drawer-in{backdrop-filter:none;-webkit-backdrop-filter:none;}
html.theme-pro #mpBig.mpb-fs .mpb-head button, html.theme-pro #mpBig:fullscreen .mpb-head button{backdrop-filter:none;-webkit-backdrop-filter:none;}

/* PRO shell polish: one navigation area, unclipped content and consistent tiles. */
html.theme-pro #mainView > .header{display:none!important;}
html.theme-pro #proSide{overflow-y:auto;overflow-x:hidden;}
html.theme-pro .pro-brand,
html.theme-pro .pro-tools,
html.theme-pro .pro-nav,
html.theme-pro .pro-side-bottom{flex-shrink:0;}
html.theme-pro .pro-folders-wrap{flex:1 0 auto;overflow:visible;}
html.theme-pro .pro-brand .app-brand{display:flex;align-items:center;justify-content:center;gap:9px;width:auto;max-width:100%;}
html.theme-pro .pro-brand .logo-dot{flex-shrink:0;}
html.theme-pro .pro-brand .app-brand h1{
  max-width:none!important;white-space:nowrap!important;overflow:visible!important;
  line-height:0;overflow-wrap:anywhere;opacity:1;transform:none;text-align:left;
  display:flex;align-items:center;margin:0;
}
/* 맞춤 앱 제목(글자)일 때만 줄간격 복구 — 워드마크 이미지는 line-height:0 으로 아이콘과 높이 맞춤 */
html.theme-pro .pro-brand .app-brand h1:not(:has(img.brand-wordmark)){
  line-height:1.5;white-space:normal!important;
}
html.theme-pro .pro-brand .link-bar{width:100%;margin:12px 0 0;max-width:none;justify-content:center;}
html.theme-pro .pro-brand .link-chip{min-width:0;max-width:100%;}
html.theme-pro .pro-brand .link-chip span{white-space:normal;overflow-wrap:anywhere;}
/* 14.64 · 도구 줄 = '남은 버튼 한 줄 + 검색 한 줄'.
   · 버튼은 flex:1 1 0 으로 사이드바 폭을 똑같이 나눠 가진다 → 280px 안에 무조건 들어온다.
   · 넘칠 때 가로 스크롤로 잘리던 14.54 nowrap(!important)은 14.64 블록에서 풀었다.
   · 검색은 flex-basis 100% 로 제 줄을 차지한다(좁은 레일에서는 44px 아이콘 칸). */
html.theme-pro .pro-tools{padding:8px 10px 10px;}
html.theme-pro .pro-tools .hdr-right{display:flex;flex-wrap:wrap;gap:6px;margin:0!important;width:100%;align-items:center;overflow:visible;}
html.theme-pro .pro-tools .tool-btn{flex:1 1 0;min-width:0;width:auto;height:34px;padding:0;}
/* Existing controls are moved, not cloned: IDs, badges and handlers stay intact. */
html.theme-pro .pro-tools button[onclick="openCards()"],
html.theme-pro .pro-tools button[onclick="openSettings()"]{display:none!important;}
html.theme-pro .pro-tools .search-wrap{order:9;flex:1 1 100%;min-width:0;max-width:none;width:auto;margin-left:0;}
html.theme-pro .pro-tools #searchInput{display:block!important;width:100%!important;min-width:0;height:34px!important;border-radius:4px!important;}
html.theme-pro #mainView{overflow:visible;}
html.theme-pro #mainView > main{padding:10px clamp(8px,1.5vw,16px) 16px!important;overflow:visible;}
html.theme-pro #noteGrid{padding:0 4px;align-items:stretch;overflow:visible;}
html.theme-pro #breadcrumb{padding:0 0 4px 2px;flex-wrap:wrap;gap:4px;line-height:1.5;overflow:visible;max-width:100%;}
html.theme-pro #breadcrumb > *{min-width:0;max-width:100%;overflow-wrap:anywhere;white-space:normal;}
html.theme-pro #breadcrumb button{flex-shrink:0;text-align:left;}
html.theme-pro #breadcrumb i{flex-shrink:0;}
@media(max-width:1023px){
  html.theme-pro #mainView > main{padding-left:4px!important;padding-right:4px!important;}
  html.theme-pro #noteGrid{padding-left:4px;padding-right:4px;}
}
/* 15.14.1 · 점선 '새 노트' 타일은 프로 홈에서만 숨긴다(홈은 파란 알약 버튼).
   폴더 화면에서는 이제 타일이 보인다 — 폴더 안에서 새 노트를 만들 길이
   생략돼 있던 구멍을 막는다. 검색 중에는 JS 가 애초에 타일을 만들지 않는다. */
html.theme-pro #noteGrid:has(> .pro-home) .add-card{display:none!important;}
html.theme-pro #noteGrid .note-preview{background:#eef0f5;}
@media(max-width:1023px){
  html.theme-pro .pro-brand .app-brand{display:flex;justify-content:center;}
  html.theme-pro .pro-tools{padding:6px 8px;}
  html.theme-pro .pro-tools .hdr-right{justify-content:center;}
  html.theme-pro .pro-tools .search-wrap{width:44px;}
  html.theme-pro .pro-tools #searchInput{padding-left:34px!important;padding-right:0!important;}
  html.theme-pro .pro-tools .search-wrap:focus-within{position:fixed!important;left:68px;top:12px;width:min(280px,calc(100vw - 80px));z-index:100;}
  html.theme-pro .pro-tools .search-wrap:focus-within #searchInput{padding-right:12px!important;}
  html.theme-pro .pro-side-bottom{margin-top:auto;}
}
@media(max-width:640px){
  html.theme-pro #mainView > main{padding:8px 4px 16px!important;}
}

/* PRO discovery and reading: labels, stable title rows, clear search states. */
.pro-results[hidden]{display:none!important;}
html.theme-classic .pro-results{display:none;}
html.theme-pro .pro-results{
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;
  gap:8px;padding:8px 10px;margin-bottom:8px;border:1px solid var(--border);
  border-radius:4px;background:var(--card);font-size:13px;color:var(--text2);
}
html.theme-pro .pro-results > span{min-width:0;overflow-wrap:anywhere;}
html.theme-pro .pro-results-x{
  min-height:30px;width:30px;padding:0;border:1px solid transparent;border-radius:6px;
  background:transparent;color:var(--text3);font-size:16px;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro .pro-results-x:hover{background:var(--bg2);color:var(--text2);border-color:var(--border);}
html.theme-pro #noteGrid .note-card-name{min-height:64px;padding:10px 14px;align-items:center;}
html.theme-pro #noteGrid .note-card-name > span:first-child{
  min-width:0;white-space:normal!important;overflow-wrap:anywhere;line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
}
html.theme-pro #noteGrid .add-card{gap:12px;font:inherit;font-size:13px;font-weight:600;}
html.theme-pro #noteGrid .add-card > i{font-size:32px;}
html.theme-pro .pro-home-empty{gap:8px;padding:16px 8px;line-height:1.6;}
html.theme-pro .pro-home-empty strong{color:var(--text2);font-size:15px;}
html.theme-pro .pro-home-bar{margin-bottom:8px;}
html.theme-pro .pro-side-bottom{margin-top:auto;}
html.theme-pro .pro-nav-item,
html.theme-pro .pro-fold-item{min-height:40px;}
html.theme-pro #proSide button:focus-visible,
html.theme-pro #noteGrid .add-card:focus-visible,
html.theme-pro .pro-results-x:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}
@media(min-width:1024px){
  /* 14.64 · 도구 블록 — 버튼 한 줄 + 검색 한 줄, 아래에 헤어라인으로 구획. */
  html.theme-pro .pro-tools{padding-bottom:10px;border-bottom:1px solid var(--border);margin:0 10px 8px;}
  html.theme-pro .pro-tools .tool-btn[data-pro-label]{
    display:flex;align-items:center;justify-content:center;gap:0;
    flex:1 1 0;min-width:0;width:auto;height:34px;padding:0;
    background:#FFFFFF;border:1px solid var(--border);border-radius:6px;
  }
  html.theme-pro .pro-tools .tool-btn[data-pro-label]::after{
    content:none!important;display:none!important;
  }
  html.theme-pro .pro-tools .tool-btn:hover{background:#eef0f5;border-color:#dfe3eb;}
  /* 14.61 · 사이드바 폭(280px)에서 관리자 아이콘이 잘리던 문제 — 14.64 에서
     버튼을 폭 균등 분배(flex:1 1 0)로 바꿔 한 줄에 전부 들어가게 했다. */
  html.theme-pro .pro-tools .hdr-right{row-gap:6px;}
  html.theme-pro .pro-tools .search-wrap{margin-bottom:0;}
  /* 오프라인 배지는 상태 줄로 옮겨졌지만(JS), 혹시 도구 줄에 남아도 한 줄을 다 쓴다. */
  html.theme-pro .pro-tools #offlineBadge{order:8;flex:1 1 100%;max-width:none;justify-content:center;}
}
@media(max-width:1023px){
  /* 아이콘 레일(60px) — 버튼이 한 줄에 하나씩 세로로 쌓인다. */
  html.theme-pro .pro-tools{padding:6px 8px 8px;}
  html.theme-pro .pro-tools .tool-btn{height:44px;}
  html.theme-pro .pro-tools .tool-btn[data-pro-label]::after{content:none;}
}

/* PRO editor: document actions above, grouped editing tools below.
   Preserve the compact horizontal touch toolbar on phones/short landscapes. */
html.theme-pro .editor-toolbar{
  background:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  border-bottom:0!important;box-shadow:none!important;
  color:var(--ed-pebble-ink);
}
html.theme-pro .editor-toolbar .tool-btn{flex-shrink:0;color:var(--edbar-ink)!important;}
html.theme-pro .editor-toolbar button:focus-visible,
html.theme-pro .editor-toolbar input:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}
html.theme-pro .editor-toolbar .tool-btn.active{
  background:var(--accent)!important;
  color:#fff!important;box-shadow:none!important;
}
html.theme-pro .editor.focus-on .editor-toolbar{display:none!important;}
html.theme-pro .editor-toolbar button:disabled{opacity:.4;cursor:not-allowed;box-shadow:none!important;}
@media(min-width:1025px) and (min-height:561px), (min-width:1025px) and (pointer:fine){
  /* 14.62 · 제목과 도구(글꼴)를 한 줄로 — 예전 'title / tools 2줄' 그리드를
     Word 처럼 '왼쪽 제목 · 가운데 도구 · 오른쪽 액션' 한 줄로 통합한다.
     15.27 · 양옆 칸은 자기 내용보다 작아지지 않게(min-content) 하고, 도구가
     늘어나면 겹치는 대신 툴바가 가로로 스크롤된다(팝오버는 fixed 라 잘리지 않는다).
     1024px 이하는 문서 앞쪽 '한 줄 가로 스크롤' 규칙이 맡는다. */
  html.theme-pro .editor-toolbar{
    display:grid!important;grid-template-columns:minmax(min-content,1fr) auto minmax(min-content,1fr)!important;
    grid-template-areas:"title tools actions"!important;
    height:auto!important;min-height:0!important;padding:6px 16px 7px!important;
    gap:4px 12px;overflow-x:auto!important;overflow-y:hidden!important;
    scrollbar-width:none;align-items:center!important;
  }
  html.theme-pro .editor-toolbar::-webkit-scrollbar{display:none;}
  html.theme-pro .editor-toolbar .tb-left{grid-area:title;min-width:0;}
  html.theme-pro .editor-toolbar .tb-right{grid-area:actions;gap:8px;justify-self:end;flex-wrap:nowrap;}
  html.theme-pro .editor-toolbar .tb-title-wrap{flex-wrap:wrap;gap:0 12px;}
  html.theme-pro .editor-toolbar #edTitle{
    width:100%;max-width:300px;min-width:80px;height:32px;
    font-size:14px!important;font-weight:500!important;padding:5px 8px!important;
    color:var(--edbar-ink)!important;
  }
  html.theme-pro .editor-toolbar #saveState{font-size:11px!important;color:var(--edbar-ink3)!important;}
  html.theme-pro .editor-toolbar .tb-mid{
    grid-area:tools;justify-self:center;justify-content:center;flex-wrap:wrap;
    gap:6px!important;border-top:none;padding-top:0;max-width:100%;
  }
  html.theme-pro .editor-toolbar .tb-mid > .tool-sep{display:none;}
  html.theme-pro .editor-toolbar .tb-group{
    position:relative;gap:2px;background:rgba(255,255,255,.07)!important;border:1px solid var(--edbar-line)!important;
    padding:3px!important;border-radius:6px!important;
  }
  html.theme-pro .editor-toolbar .tb-mid > .tb-group{padding-top:3px!important;}
  html.theme-pro .editor-toolbar .tb-mid > .tb-group::before{display:none!important;content:none!important;}
  html.theme-pro .editor-toolbar .tool-btn,
  html.theme-pro .editor-toolbar .tool-btn.sm{width:32px!important;height:32px!important;font-size:17px!important;color:var(--edbar-ink)!important;}
  html.theme-pro .editor-toolbar .font-btn{height:34px;max-width:180px;min-width:80px;background:var(--edbar-fill)!important;border:1px solid var(--edbar-line)!important;color:var(--edbar-ink)!important;}
  html.theme-pro .editor-toolbar #fontLabel{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--edbar-ink)!important;}
  html.theme-pro .editor-toolbar #fsInput{height:34px;width:42px;border-radius:6px;background:var(--edbar-fill)!important;border:1px solid var(--edbar-line)!important;color:var(--edbar-ink)!important;}
  html.theme-pro .editor-toolbar .split-btn{height:34px;border:1px solid var(--edbar-line);background:transparent;border-radius:6px;}
  html.theme-pro .editor-toolbar .split-btn .main{height:32px;min-width:30px;color:var(--edbar-ink)!important;}
  html.theme-pro .editor-toolbar .split-btn .caret{height:32px;width:18px;border-left:1px solid var(--edbar-line);color:var(--edbar-ink3)!important;}
  html.theme-pro .editor-toolbar .tool-sep{height:20px;margin:0 4px;background:var(--edbar-line)!important;}
  html.theme-pro .editor-toolbar .pg-nav{height:36px;background:var(--edbar-fill);border:1px solid var(--edbar-line);border-radius:6px;}
  html.theme-pro .editor-toolbar .pg-nav button{width:28px;height:28px;font-size:18px;color:var(--edbar-ink)!important;}
  html.theme-pro .editor-toolbar .tb-labeled{width:32px!important;height:32px!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center;gap:0!important;}
  html.theme-pro .editor-toolbar .tb-labeled::after{display:none!important;content:none!important;}
}
@media(min-width:821px) and (max-width:1100px){
  html.theme-pro .editor-toolbar .tb-labeled::after{content:none;}
}
@media(max-width:820px), (max-height:560px) and (pointer:coarse){
  html.theme-pro .editor-toolbar{height:auto!important;min-height:54px!important;}
}

/* Bookmarks live separately from the logo: a readable, scrollable list. */
.link-add-label{display:none;}
html.theme-pro .pro-bookmarks{margin:4px 12px 8px;flex-shrink:0;min-width:0;}
html.theme-pro .pro-bookmarks > summary{
  display:flex;align-items:center;gap:8px;min-height:40px;padding:8px;
  border-radius:6px;color:var(--text2);font-size:12px;font-weight:600;cursor:pointer;list-style:none;
}
html.theme-pro .pro-bookmarks > summary::-webkit-details-marker{display:none;}
html.theme-pro .pro-bookmarks > summary:hover{background:#eef0f5;}
html.theme-pro .pro-bookmarks > summary > i{font-size:18px;flex:none;}
html.theme-pro .pro-bookmark-count{margin-left:auto;color:var(--text3);font-size:11px;}
html.theme-pro .pro-bookmark-chevron{transition:transform .15s;}
html.theme-pro .pro-bookmarks[open] .pro-bookmark-chevron{transform:rotate(180deg);}
html.theme-pro #proBookmarkSlot{min-width:0;max-height:min(260px,35dvh);overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;padding:3px;}
html.theme-pro #proBookmarkSlot .link-bar{
  display:flex!important;flex-direction:column;align-items:stretch;flex-wrap:nowrap;
  width:100%;max-width:none;margin:0;padding:3px;gap:4px;overflow:visible;
  border:0;border-radius:0;background:transparent;box-shadow:none;
}
html.theme-pro #proBookmarkSlot .link-chip{
  display:flex;align-items:center;flex:none;min-width:0;max-width:none;width:100%;
  min-height:40px;padding:9px 10px;gap:8px;border-radius:6px;
  background:transparent;border:1px solid transparent;box-shadow:none;white-space:normal;
}
html.theme-pro #proBookmarkSlot .link-chip:hover{background:#eef0f5;border-color:var(--border);}
html.theme-pro #proBookmarkSlot .link-chip span{
  display:block;min-width:0;white-space:normal;overflow:visible;overflow-wrap:anywhere;
  font-size:12px;line-height:1.5;text-overflow:clip;
}
html.theme-pro #proBookmarkSlot .link-add{
  width:100%;height:40px;min-height:40px;border-radius:6px;border:1px dashed var(--border);
  gap:8px;background:transparent;box-shadow:none;font-size:12px;
}
html.theme-pro #proBookmarkSlot .link-add-label{display:inline;}
html.theme-pro .pro-bookmarks summary:focus-visible,
html.theme-pro #proBookmarkSlot a:focus-visible,
html.theme-pro #proBookmarkSlot button:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
html.theme-pro #proBookmarkSlot .link-ins-before::before,
html.theme-pro #proBookmarkSlot .link-ins-after::after{left:4px;right:4px;top:-3px;bottom:auto;width:auto;height:2px;}
html.theme-pro #proBookmarkSlot .link-ins-after::after{top:auto;bottom:-3px;}
@media(max-width:1023px){
  html.theme-pro .pro-bookmarks{margin:0 8px 6px;}
  html.theme-pro .pro-bookmarks > summary{width:44px;min-height:44px;padding:0;justify-content:center;}
  html.theme-pro .pro-bookmarks > summary > span,
  html.theme-pro .pro-bookmark-chevron{display:none;}
  html.theme-pro #proBookmarkSlot{
    position:fixed;left:68px;top:max(12px,env(safe-area-inset-top));
    width:min(340px,calc(100vw - 80px));max-height:calc(100dvh - 24px - env(safe-area-inset-top));
    padding:8px;background:var(--card);border:1px solid var(--border);border-radius:8px;
    box-shadow:0 12px 36px rgba(23,28,41,.16);z-index:95;
  }
}

/* ── 14.54 · 전역 사각화 + 헤더 한 줄 고정 — 사각사각 + nowrap ──
   · PRO 10/8/6 → 4/4/3으로 낮춰 앱 전반 각지게
   · 헤더 우측 아이콘 행(.hdr-right)은 절대 두 줄로 접히지 않고, 넘치면 가로 스크롤
   · pill(999px)·원형 50% 중 실질 원형 지표 제외, 나머지는 4px로 통일
   14.64 · 사이드바(#proToolsSlot) 안 도구 줄은 여기서 뺐다 — 280px 폭에서는
   가로 스크롤이 곧 '버튼이 잘림'이라, 버튼을 폭 균등 분배해 한 줄에 넣는다. */
.header .w-full{flex-wrap:nowrap!important;}
.header .hdr-right,
html.theme-classic .hdr-right{
  flex-wrap:nowrap!important;overflow-x:auto!important;overflow-y:hidden!important;
  scrollbar-width:none!important;-webkit-overflow-scrolling:touch;
}
.header .hdr-right::-webkit-scrollbar{display:none!important;}
/* 대형 표면 · 카드 · 창 — 4px 사각 */
.note-card,.folder-card,.add-card,.modal-box,.mp,.mp.mp-bar,.mp-list,.mpb,#ypApp,.fcard-win,
.sa-card,.ypg-card,.more-panel,.srv-pop,.notif-pop,.ai-say,.ai-hist,.ai-askbar-field,.ai-hist-bubble,
.select-bar,.ctx-menu,.mpctx,.cd-deck,.cd-face,.cd-qq,.cd-opt,.cd-stat,.cd-tile,.rep-top,.ana-kpi,.ana-sec,
.fc-mode,.fc-btn,.mpb-now,.yp-bub,.yp-file,.yp-img,.theme-pick,.link-chip,.vault-desk,.side-panel,
.header .tool-btn,.tool-btn,.pro-nav-item,.pro-fold-item,#searchInput,.mp-search,.cd-paste,.cd-name,
.cd-prompt,.cd-explain,.cd-memory,.fcard-head,.vault-desk,.sp-thumb,.pg-nav,.tb-group,
.editor-toolbar .tool-btn,.breadcrumb button,.cards-actions .cd-btn,.cd-grade button,.cd-testpick,
.tblsize-box,.tblsize-step,.tblsize-actions button,.tg-label,.fc-laps,.fc-custom input,#welcomeToast,
#splash .sp-logo,.home-add-note,.notif-item,.mp-tagm .box,.cd-hero,.cd-reveal,.otter-bubble,
.mpb-cover,.mpb-reco-art,.mpb-album-art,.pl-mini,#plPickPop,#musicListPop .mp-li,.yp-emoji,.yp-settings,
.sa-logo,.sa-tabs,.sa-sendbtn,.sa-btn,.sa-pwbox,.sa-me,.vault-grid .v-file,.vault-grid .v-file:hover,
.import-btn,.size-preset-card,.sp-item,.sp-sec,.fcard-head,.cd-inner,.cd-tip-item,.fcard-win .ex-item{
  border-radius:4px!important;
}
.ai-kind,.cd-tag,.pro-bookmark-count,.mp-badge,.link-bar,.link-add,
.offline-badge,.page-count-badge,.notif-badge,.srv-track,.srv-fillbar,.tbl-bar,.find-bar,.wf-bar{
  border-radius:4px!important;
}
html.theme-pro .modal-box,html.theme-pro .mpb,html.theme-pro #ypApp,html.theme-pro .sa-card,
html.theme-pro .ypg-card,html.theme-pro .mp-addpop,html.theme-pro .mp-tagm .box,
html.theme-pro .more-panel,html.theme-pro .srv-pop,html.theme-pro .notif-pop,
html.theme-pro .cd-hero,html.theme-pro .cd-face,html.theme-pro .cd-qq,html.theme-pro .cd-reveal,
html.theme-pro .cd-opt,html.theme-pro .cd-stat,html.theme-pro .cd-tile,
html.theme-pro .fcard-win.fcard-max .cd-face,html.theme-pro .fcard-win.fcard-max .cd-tile,
html.theme-pro .otter-bubble,html.theme-pro .mpb-now,html.theme-pro .mpb-playlist-card .mpb-album-art,
html.theme-pro .mp-eqpop,html.theme-pro #welcomeToast,html.theme-pro .rep-top{
  border-radius:4px!important;
}
html.theme-pro .ai-say{border-radius:4px!important;}
html.theme-pro .ai-hist{border-radius:4px 4px 0 0!important;}
html.theme-pro .note-card,html.theme-pro .folder-card,html.theme-pro .add-card,
html.theme-pro #noteGrid .note-card,html.theme-pro #noteGrid .folder-card,html.theme-pro #noteGrid .add-card,
html.theme-pro .mp-list,html.theme-pro .mp.mp-bar,html.theme-pro .mp-xtra,html.theme-pro .select-bar,
html.theme-pro .ctx-menu,html.theme-pro .mpctx,html.theme-pro .toast,html.theme-pro .tbl-bar,
html.theme-pro .find-bar,html.theme-pro .wf-bar,html.theme-pro .font-menu,html.theme-pro .cd-deck,
html.theme-pro .cd-name,html.theme-pro .cd-prompt,html.theme-pro .cd-explain,html.theme-pro .ana-kpi,
html.theme-pro .ana-sec,html.theme-pro .fc-x,html.theme-pro .fc-btn,html.theme-pro .fc-mode,
html.theme-pro .mpb-cover,html.theme-pro .mpb-reco-art,html.theme-pro .mpb-album-art,
html.theme-pro .mpb-ctl button,html.theme-pro .pl-mini,html.theme-pro #plPickPop,
html.theme-pro #musicListPop .mp-li,html.theme-pro .yp-bub,html.theme-pro .yp-img,
html.theme-pro .yp-emoji,html.theme-pro .yp-settings,html.theme-pro .theme-pick,
html.theme-pro #splash .sp-logo,html.theme-pro .card-menu,html.theme-pro .mp-otter,
html.theme-pro .ai-hist-item,html.theme-pro .ai-askbar-field,html.theme-pro .notif-item{
  border-radius:4px!important;
}
html.theme-pro .more-grid button,html.theme-pro .cd-btn,html.theme-pro .cd-grade button,
html.theme-pro .cd-testpick,html.theme-pro .cd-paste,html.theme-pro .cd-listbar,html.theme-pro .cd-br,
html.theme-pro .sa-step input,html.theme-pro .sa-sent,html.theme-pro .sa-pwbox input,
html.theme-pro .ypfr-add input,html.theme-pro .ypfr-add button,html.theme-pro .ypfr-btn,
html.theme-pro .tp-swatch,html.theme-pro .pg-nav,html.theme-pro .tool-btn,html.theme-pro .tb-group,
html.theme-pro .pro-nav-item,html.theme-pro .pro-fold-item,html.theme-pro .pro-add-folder,
html.theme-pro #searchInput,html.theme-pro .breadcrumb button,html.theme-pro .pro-brand .link-chip,
html.theme-pro .home-section-title i,html.theme-pro .font-btn,html.theme-pro .mpb-li,
html.theme-pro .fcard-win,html.theme-pro .fcard-win.moved,html.theme-pro .modal-bg .modal-box.cards-box,
html.theme-pro #mpBig,html.theme-pro .ctx-menu.show,html.theme-pro #uploadProg .modal-box{
  border-radius:4px!important;
}
/* 레일(60px)에서는 검색칸이 44px 아이콘 유지 — 전역 110px 최소가 덮지 않게 복원 */
@media(max-width:1023px){
  html.theme-pro .pro-tools .search-wrap{
    flex:0 0 44px!important;min-width:44px!important;max-width:44px!important;width:44px!important;margin-left:0!important;
  }
  html.theme-pro .pro-tools .hdr-right{justify-content:center!important;gap:4px!important;}
}

/* 14.58 · Pro feather logo — 전문 SVG (아웃라인+척추+닙+플러리시+잉크점).
   클래식에서는 기존 remix 아이콘만 보이고, 프로에서는 SVG만 보인다.
   viewBox 0 0 32, 벡터-논스케일링 스트로크로 모든 해상도에서 날카롭게,
   currentColor 로 dot 배경(파랑) 위 흰 선을 유지한다. */
.logo-dot{display:flex;align-items:center;justify-content:center;}
.logo-dot .logo-pro,
.sp-logo .logo-pro{display:none;flex:none;}
.logo-dot .logo-pro{width:18px;height:18px;color:#fff;}
.sp-logo .logo-pro{width:36px;height:36px;color:#fff;}
html.theme-pro .logo-dot .logo-classic,
html.theme-pro .sp-logo .logo-classic{display:none!important;}
html.theme-pro .logo-dot .logo-pro,
html.theme-pro .sp-logo .logo-pro{display:block;}
/* 14.62 · 펜 글리프가 viewBox(32) 오른쪽(9~28) 에 몰려 있어 살짝 오른쪽으로
   치우쳐 보인다 — 사이드바 브랜드 로고만 0.8px 왼쪽으로 되돌려 시각 중심을 맞춘다 */
html.theme-pro .pro-brand .logo-dot .logo-pro{width:16px;height:16px;transform:translateX(-.8px);}
.sp-logo{display:flex;align-items:center;justify-content:center;}
/* 14.80.1 · 로고 이미지(여백 트림본)가 배지 칸에 정확히 앉는다 —
   이미지 여백 하양 == 배지/면 하양(--logo-paper) 이라 경계가 보이지 않는다. */
.logo-dot .brand-mark,.sp-logo .brand-mark,.sa-logo .brand-mark{
    width:100%;height:100%;object-fit:contain;display:block;border-radius:inherit;
}

/* 14.66 · 기본(일반) 테마 홈의 파장별 버츄얼라이저 배경 — 음악이 울릴 때만 살며시 일렁인다
   내부 테마 키가 html.theme-pro인 기본 테마에서만 보이고, #mainView 뒤(z:-1)에 얇게 깔린다.
   터치는 통과(pointer-events:none)하고 노트/그리드를 절대 가리지 않는다.
   성능: will-change opacity, rAF 한 루프, dpr 1.6 상한, turbo·모션감소는 표시 안 함. */
#proHomeEq{
  position:fixed;inset:0;left:280px;z-index:-1;pointer-events:none;
  width:calc(100% - 280px);height:100%;
  opacity:0;transition:opacity .85s cubic-bezier(.22,.9,.32,1),left .22s cubic-bezier(.22,.9,.32,1.06);
  filter:blur(.5px) saturate(1.05);
  will-change:opacity;
}
html.theme-pro #proHomeEq{opacity:0;}
/* 재생 중엔 0.10~0.16 선 — 라이트 캔버스(#F4F5F8)에서 노트·그리드보다 항상 옅게 */
html.theme-pro #proHomeEq.playing{opacity:.14;}
html.theme-pro #proHomeEq.idle{opacity:0;}
/* 캐주얼 테마에서는 표시 안 함 */
html.theme-classic #proHomeEq,
html:not(.theme-pro) #proHomeEq{display:none!important;}
/* 에디터가 열리면 숨김 — 기존 ambient/wall 숨김과 동일 선상 */
body:has(#editorView.open) #proHomeEq{opacity:0!important;}
/* 저사양·모션감소 — 장식이므로 아예 숨김 */
body.sdy-turbo #proHomeEq{display:none!important;}
/* ================================================================
   14.60 · 디자인 다듬기 — 진한 파랑 포인트 + 가독성 + 툴바 아이콘만
   ────────────────────────────────────────────────────────────────
   · 진한 파랑 포인트는 :root/html.theme-pro 토큰(--accent #14366E)으로
     이미 위에서 교체. 본 블록은 그 결정을 보정한다.
   · 편집 상단바 라벨 숨김(글자서식/넣기/그리기/편집기록), 되돌리기 아이콘만.
   · 현재 쪽 테두리·라벨 강조 제거.
   · 북마크 노란 채움 + PRO 집게 숨김 + 뒤로 버튼 숨김.
   ================================================================ */

/* 14.60-A · 현재 쪽 강조 제거 — 종이에 색 테두리를 두르지 않는다 */
/* 14.72.6 · 그림자는 --shadow(약함)이 아닌 --paper-shadow(어두운 캔버스 위 부각용) 사용 */
.paper.focused{
  outline:none!important;
  outline-offset:0!important;
  box-shadow:var(--paper-shadow)!important;
}
html.theme-pro .paper.focused{
  outline:none!important;
  outline-offset:0!important;
  box-shadow:0 1px 3px rgba(23,28,41,.07),0 10px 28px -10px rgba(23,28,41,.14)!important;
}
.page-wrap.focused .page-label{color:var(--text3)!important;font-weight:400!important;}
.page-wrap.focused .page-label>span{padding:0!important;border-radius:0!important;background:transparent!important;}

/* 14.60-B · 편집창 뒤로 버튼 숨김 — 크롬 자체 뒤로(히스토리)로 이동 */
.editor-toolbar .tb-left button[onclick="navBack()"]{display:none!important;}

/* 14.60-C · 북마크 노란 채움 — 내부가 꽉 찬 별 모양 */
.pro-bookmarks > summary > i.ri-bookmark-fill,
.pro-bookmarks > summary > i.ri-bookmark-line{color:#EAB308!important;}
html.theme-pro .pro-bookmarks > summary > i.ri-bookmark-fill{color:#EAB308!important;}
.pro-bookmarks > summary > i.ri-bookmark-fill{filter:drop-shadow(0 1px 2px rgba(234,179,8,.35));}

/* 14.60-D · PRO 집게 애니메이션 제거 — 프로에서는 성능·시각적으로 숨김 */
html.theme-pro #clawFx{display:none!important;}

/* 14.60-E · 가독성 — 본문 렌더링 다듬기 (성능 영향 없음) */
body{ -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility; }
#noteGrid .note-card-name{font-weight:700;letter-spacing:-.01em;}
html.theme-pro #noteGrid .note-card-name{color:#0F172A;}
.pro-home-count, .home-section-title, .pro-folders-title{ letter-spacing:-.01em; }

/* 14.60-F · PRO 노트 열림 — 슬라이드 없이 깔끔하게 (프로 요청) */
html.theme-pro .editor{
  transform:none!important;
  transition:none!important;
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}
html.theme-pro .editor.open{
  transform:none!important;
  opacity:1!important;
  visibility:visible!important;
  pointer-events:auto!important;
  transition:none!important;
}

@media(prefers-reduced-motion:reduce){
  #proHomeEq{display:none!important;}
}
@media(max-width:1023px){
  #proHomeEq{left:60px;width:calc(100% - 60px);}
}
@media(max-width:640px),(max-height:560px) and (pointer:coarse){
  #proHomeEq{left:0!important;width:100%!important;top:88px!important;height:calc(var(--sdy-mobile-vh,100dvh) - 88px)!important;}
}


/* ═══════════════════════════════════════════════════════════════════
   14.64 · 사이드바 정리 + 접기 제거 + 원형 음반

   ① 접기/펼치기 제거 — 사이드바는 항상 280px(좁은 화면은 60px 아이콘 레일).
      #proSideToggle 버튼·.pro-side-toggle CSS·window.toggleProSide·
      applyProCollapsed·localStorage proSideCollapsed 를 전부 없앴다.
   ② 서버 상태(+오프라인 배지)는 도구 줄에서 빠져 사이드바 맨 위 전용 줄로 올라간다.
      (_proShellSwap 이 프로에서 #srvGauge·#offlineBadge 를 #proStateRow 로 옮기고,
       캐주얼 테마로 돌아가면 헤더 도구 줄 첫 자리로 되돌린다 — 클래식 화면은 그대로)
   ③ 나머지 버튼(알림·계정·집중 시계·보관함·관리자)은 한 줄에 폭을 똑같이 나눠 갖고,
      검색은 제 줄을 통째로 쓴다 → 280px 사이드바 밖으로 밀려나 잘리는 일이 없다.
   ④ 플로팅 음악 음반(.mp.mp-float)은 14.54 사각화(!important)에 눌려 4px 사각이
      되어 있었다 — 요청대로 원형(50%)을 되돌린다.
   ═══════════════════════════════════════════════════════════════════ */

/* ② 상태 줄 — 계기판 + 상태 문구 (+ 오프라인/동기화 배지) */
html.theme-pro .pro-state{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  margin:0 10px 8px;padding:7px 9px;
  border:1px solid var(--border);border-radius:8px;background:#FFFFFF;
  flex-shrink:0;
}
html.theme-pro .pro-state #srvGauge{flex:none;margin:0;}
html.theme-pro .pro-state .srv-gauge{width:34px;height:24px;}
html.theme-pro .pro-state .srv-gauge svg{width:32px;height:22px;}
html.theme-pro .pro-state-text{
  flex:1 1 60px;min-width:0;font-size:11.5px;font-weight:700;letter-spacing:-.01em;
  color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
html.theme-pro .pro-state.good .pro-state-text{color:#0E9F6E;}
html.theme-pro .pro-state.warn .pro-state-text{color:#C27803;}
html.theme-pro .pro-state.bad  .pro-state-text{color:#E02424;}
/* 14.72.4 · 확인 불가(상태 요청 실패) — 부하 등급이 아니라 중립 색 */
html.theme-pro .pro-state.down .pro-state-text{color:var(--text3);}
html.theme-pro .pro-state #offlineBadge{
  flex:1 1 100%;justify-content:center;padding:4px 8px;font-size:11px;
}

/* ③ 도구 줄 — 한 줄에 쏙. (기본 규칙은 위 14.64 도구 블록, 여기선 마무리 보정)
   .tool-btn 의 전역 width/height 32px!important 를 이겨야 눌러 쓰기 좋은 크기가 된다. */
html.theme-pro .pro-tools .tool-btn{font-size:16px;height:36px!important;border-radius:6px;}
html.theme-pro .pro-tools .tool-btn.on{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border));}

/* ④ 플로팅 음반은 원형 — 19.0 에서 #musicPlayer 플로팅 모드가 사라지고 전용
   음반(#mpDisc)으로 다시 만들어졌다. 원형 유지 규칙(사각화보다 강하게)은
   문서 끝 '19.0 · 플로팅 음반' 블록이 맡는다. */

/* ⑤ 14.65 · 알림 배지 — 전역 '4px 라운드' 규칙(.notif-badge 포함)에 눌려
   네모가 되고 버튼 모서리에 파묻혀 잘린 것처럼 보였다. 알약 모양을 되찾고
   버튼 밖으로 또렷하게 내민다(부모 .hdr-right·#proSide 는 overflow:visible). */
.notif-badge{
  border-radius:999px!important;right:-6px!important;top:-7px!important;
  min-width:18px;height:18px;line-height:14px;font-size:10px;font-weight:800;
  box-shadow:0 0 0 1px rgba(23,28,41,.10);
}
html.theme-pro .pro-tools .notif-badge{border-color:var(--card);}

/* 아이콘 레일(≤1023) — 상태 줄은 계기판만 남기고 가운데 정렬(60px),
   도구 버튼은 한 줄에 하나씩(칸 폭 100%) 쌓는다. (flex:1 1 0 만 두면 60px
   폭에서 다섯 개가 5px 씩 찌그러진다 — 폭을 못 줄이도록 0 0 auto 로 못 박는다) */
@media (max-width:1023px){
  html.theme-pro .pro-tools .hdr-right{flex-direction:column;align-items:stretch;gap:4px;}
  html.theme-pro .pro-tools .tool-btn{
    flex:0 0 auto!important;width:100%!important;max-width:none!important;height:40px!important;
  }
  html.theme-pro .pro-tools .search-wrap{
    flex:0 0 auto!important;width:100%!important;min-width:0!important;max-width:none!important;
    margin:0!important;
  }
  html.theme-pro .pro-tools #searchInput{padding-left:12px!important;padding-right:8px!important;}
  html.theme-pro .pro-state{
    flex-wrap:nowrap;justify-content:center;gap:0;
    margin:0 6px 8px;padding:5px 0;
  }
  html.theme-pro .pro-state-text{display:none;}
  html.theme-pro .pro-state #offlineBadge{
    flex:0 0 auto;max-width:44px;overflow:hidden;padding:4px;font-size:0;
  }
  html.theme-pro .pro-state #offlineBadge i{font-size:15px;}
  html.theme-pro .pro-state #offlineBadge span{display:none;}
}

/* 14.61 · add-card 가 진짜 <button> 이 된 뒤 UA 기본 모양을 클래스 규칙으로 되돌린다 */
button.add-card{appearance:none;-webkit-appearance:none;font:inherit;color:inherit;padding:0;}
button.add-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}

/* ═══ 14.63 · 브랜드 왼쪽 정렬 — 로고·SDYnotes 를 사이드바 왼쪽에 맞춘다 ═══
   너무 붙이지 않게 왼쪽 20px 여백 — 폴더·내비 항목 아이콘(왼쪽 22px)과 비슷한 간격.
   좁은 화면 레일(≤1023)은 아이콘 레일이므로 그대로 중앙 정렬. */
html.theme-pro .pro-brand{align-items:flex-start;text-align:left;padding:20px 12px 14px 20px;}
html.theme-pro .pro-brand .app-brand{justify-content:flex-start;}
html.theme-pro .pro-brand .app-brand h1{text-align:left;}
html.theme-pro .pro-brand .link-bar{justify-content:flex-start;}
@media (max-width:1023px){
  html.theme-pro .pro-brand{align-items:center;text-align:center;padding:12px 0 10px;}
  html.theme-pro .pro-brand .app-brand{justify-content:center;}
}

/* ══════════════════════════════════════════════════════════════════════
   14.65 · 홈 검색창의 해돌이 — 노트 검색과 같은 칸에서 묻고 답한다
   ──────────────────────────────────────────────────────────────────────
   검색창 Enter 는 항상 해돌이에게 묻는다. 답은 검색 결과 위
   #homeAiCard 에 산문으로 앉는다 (전용 물어보기 버튼·줄은 없음).
   ══════════════════════════════════════════════════════════════════════ */
.home-ai-name i{color:var(--accent);font-size:13px;}
.home-ai-card{margin:0 0 14px;border:1px solid var(--border);border-radius:10px;background:var(--bg1);
  box-shadow:0 10px 28px rgba(15,23,42,.10);overflow:hidden;}
.home-ai-head{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--border);
  background:var(--bg2);}
.home-ai-name{font-size:14px;font-weight:700;color:var(--text1);}
.home-ai-kind{font-size:12px;font-weight:600;padding:2px 7px;border-radius:999px;
  background:rgba(79,110,247,.12);color:var(--accent);}
.home-ai-gap{flex:1;}
.home-ai-mini{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:none;
  border-radius:6px;background:transparent;color:var(--text3);cursor:pointer;font-size:15px;}
.home-ai-mini:hover{background:var(--bg1);color:var(--text1);}
.home-ai-out{padding:12px 14px;font-size:16px;line-height:1.78;color:var(--text1);max-height:52vh;overflow:auto;}
.home-ai-out.busy{color:var(--text2);white-space:pre-wrap;}
.home-ai-dots i{display:inline-block;width:5px;height:5px;margin-right:4px;border-radius:50%;
  background:var(--text3);animation:homeAiDot 1s infinite ease-in-out;}
.home-ai-dots i:nth-child(2){animation-delay:.15s;}
.home-ai-dots i:nth-child(3){animation-delay:.3s;}
@keyframes homeAiDot{0%,80%,100%{opacity:.25;transform:translateY(0);}40%{opacity:1;transform:translateY(-3px);}}
.home-ai-acts{display:flex;flex-wrap:wrap;gap:8px;padding:0 14px 12px;}
.home-ai-act{display:inline-flex;align-items:center;gap:6px;padding:7px 11px;border:1px solid var(--border);
  border-radius:7px;background:var(--bg2);color:var(--text1);font-size:12px;font-weight:600;cursor:pointer;}
.home-ai-act:hover{border-color:var(--accent);color:var(--accent);}
.home-ai-meta{padding:8px 14px;border-top:1px solid var(--border);font-size:11px;color:var(--text3);}
/* 해돌이가 설정 창에서 짚어 준 줄 — 잠깐 반짝여 시선을 끈다 */
.set-row-hit{animation:setRowHit 2.2s ease;}
@keyframes setRowHit{0%{background:rgba(79,110,247,.18);}70%{background:rgba(79,110,247,.10);}100%{background:transparent;}}

/* ═══════════ 14.80.2 · 편집기 크롬 — 상단 바 배경(#171717) 제거 + 노트 위에 떠 있는 조약돌(pebble) 버튼 ═══════════
   종이(하양)가 떠 보이는 면(--editor-canvas)은 유지하고, 상단 툴바의 어두운 띠 배경은 없애
   둥근 조약돌(pebble) 버튼들이 노트 위에 가볍게 떠 있도록 한다. */
:root{
  /* 14.81.0 · 하위 호환용 토큰 유지(에디터 라이트 토큰 계약) */
  --edbar-bg:rgba(18,18,18,.98);
  --edbar-line:rgba(255,255,255,.17);
  --edbar-ink:#F7F5F1;
  --edbar-ink3:#C4C1BB;
  --edbar-fill:rgba(255,255,255,.12);
  --edbar-fill2:rgba(255,255,255,.21);
  /* 15.42.11 · 떠 있는 조약돌(pebble) 표면 토큰 — 어두운 캔버스와 흰 종이 위 모두에서 선명하게 */
  --ed-pebble-bg:linear-gradient(180deg,rgba(255,255,255,.95) 0%,rgba(244,246,250,.91) 100%);
  --ed-pebble-bg-hover:linear-gradient(180deg,#FFFFFF 0%,#F8FAFC 100%);
  --ed-pebble-bg-focus:linear-gradient(180deg,#FFFFFF 0%,#F1F5F9 100%);
  --ed-pebble-border:rgba(15,23,42,.11);
  --ed-pebble-border-hover:rgba(15,23,42,.20);
  --ed-pebble-ink:#1F2937;
  --ed-pebble-ink-strong:#0F172A;
  --ed-pebble-ink3:#64748B;
  --ed-pebble-subtle:rgba(15,23,42,.06);
  --ed-pebble-sep:rgba(15,23,42,.10);
  --ed-pebble-shadow:0 5px 14px -3px rgba(15,23,42,.20),0 2px 4px rgba(15,23,42,.08),inset 0 1px 0 rgba(255,255,255,.94);
  --ed-pebble-shadow-hover:0 8px 18px -4px rgba(15,23,42,.26),0 3px 6px rgba(15,23,42,.10),inset 0 1px 0 #FFFFFF;
  --ed-pebble-fmt-hover:linear-gradient(180deg,#F5F8FF 0%,#EAF0FF 100%);
  --ed-pebble-fmt-ink:#2B57D0;
  --ed-pebble-insert-ink:#7C3F28;
  --ed-pebble-insert-hover:linear-gradient(180deg,#FFF7F3 0%,#FFECE3 100%);
  --ed-pebble-insert-hover-ink:#B5471F;
  --ed-pebble-draw-ink:#166556;
  --ed-pebble-draw-hover:linear-gradient(180deg,#F2FCF9 0%,#E2F7F0 100%);
  --ed-pebble-draw-hover-ink:#0F766E;
  --ed-pebble-find-ink:#4F3D96;
  --ed-pebble-find-hover:linear-gradient(180deg,#F8F5FF 0%,#EEE8FF 100%);
  --ed-pebble-find-hover-ink:#5B3FD1;
  /* 15.42.12 · 편집기 빠른 메뉴(톱니 선택창) 다크 토큰 — 어두운 에디터 캔버스 톤과 맞춤 */
  --qm-scrim:rgba(8,10,14,.50);
  --qm-bg:rgba(27,28,32,.97);
  --qm-section:#24262B;
  --qm-tile:#2D3037;
  --qm-tile-hover:#363A43;
  --qm-icon-bg:#393D47;
  --qm-border:rgba(255,255,255,.10);
  --qm-border-strong:rgba(255,255,255,.16);
  --qm-divider:rgba(255,255,255,.08);
  --qm-ink:#F3F4F6;
  --qm-ink2:#D6DAE2;
  --qm-ink3:#969DAA;
  --qm-accent:#82A4FF;
  --qm-fav-bg:rgba(245,158,11,.15);
  --qm-fav-border:rgba(251,191,36,.42);
  --qm-fav-icon-bg:rgba(245,158,11,.22);
  --qm-fav-ink:#FBBF24;
  --qm-on-icon-bg:rgba(52,199,89,.20);
  --qm-on-icon-ink:#4ADE80;
  --qm-switch-off:#454954;
  --qm-switch-on:#34C759;
  --qm-knob:#FFFFFF;
  --qm-white-swatch:#FFFFFF;
  --qm-shadow:0 24px 64px rgba(0,0,0,.58),0 4px 14px rgba(0,0,0,.34),inset 0 1px 0 rgba(255,255,255,.07);
  /* 캔버스 위 글자(쪽 번호·삭제·새 페이지 상자) */
  --canvas-ink:rgba(255,255,255,.86);
  --canvas-ink3:rgba(255,255,255,.62);
  --canvas-line:rgba(255,255,255,.30);
}
html.theme-pro .editor-toolbar,
.editor-toolbar{
  background:transparent!important;
  border-bottom:0!important;
  box-shadow:none!important;
  color:var(--ed-pebble-ink);
}
.editor-toolbar .tool-btn,.editor-toolbar .tool-cat,.editor-toolbar .font-btn,
.editor-toolbar .split-btn .main,.editor-toolbar .split-btn .caret,
.editor-toolbar .pg-nav button{color:var(--ed-pebble-ink)!important;}
.editor-toolbar .tool-btn:hover,.editor-toolbar .tool-cat:hover,
.editor-toolbar .font-btn:hover,.editor-toolbar .pg-nav button:hover,
.editor-toolbar .split-btn .main:hover,.editor-toolbar .split-btn .caret:hover{
  background:var(--ed-pebble-bg-hover)!important;color:var(--ed-pebble-ink-strong)!important;
}
.editor-toolbar .tool-btn.active{background:var(--accent)!important;color:#fff!important;}
.editor-toolbar .tool-cat.on{background:var(--ed-pebble-bg-focus)!important;color:var(--ed-pebble-ink-strong)!important;}
.editor-toolbar .tool-cat .caret{color:var(--ed-pebble-ink3)!important;}
.editor-toolbar .tool-sep{display:none!important;}
.editor-toolbar #edTitle{color:var(--ed-pebble-ink)!important;}
.editor-toolbar #saveState,.editor-toolbar #zoomLabel,.editor-toolbar #liveBadge,
.editor-toolbar .pg-nav .tot{color:var(--ed-pebble-ink3)!important;}
.editor-toolbar #fsInput,.editor-toolbar .font-btn,.editor-toolbar .pg-nav{
  background:var(--ed-pebble-bg)!important;border-color:var(--ed-pebble-border)!important;
  color:var(--ed-pebble-ink)!important;}
.editor-toolbar #fsInput:focus,.editor-toolbar .pg-nav input:focus{
  background:var(--ed-pebble-bg-focus)!important;border-color:var(--ed-pebble-border-hover)!important;}
.editor-toolbar .pg-nav input{color:var(--ed-pebble-ink)!important;}
.editor-toolbar .tb-group{background:transparent!important;border-color:transparent!important;}
.editor-toolbar .toolbar-cats{background:var(--ed-pebble-bg)!important;}
.editor-toolbar .split-btn .main{background:transparent!important;
  border-color:var(--ed-pebble-sep)!important;}
.editor-toolbar #textColorWrap .main,.editor-toolbar #hlWrap .main{
  background:transparent!important;border-color:var(--ed-pebble-sep)!important;}
.editor-toolbar #textColorWrap .main:hover,.editor-toolbar #hlWrap .main:hover{
  background:rgba(15,23,42,.05)!important;}
.editor-toolbar #hlWrap .main .glyph{color:var(--ed-pebble-ink)!important;}
/* 색 띠 둘레의 가는 링 — 띠 색이 단추 바탕과 비슷해도(밝은 바탕 위 노랑·흰색, 어두운
   바탕 위 검정) 띠의 윤곽이 남고, 형광펜 '색 없음'(투명)일 때는 빈 띠로 보인다.
   15.56.1 · 링 색을 고정 남색(rgba(15,23,42,.26))에서 테마 잉크색으로 바꿨다 —
   다크 모드에서는 링이 밝아져, 기본 글자색(검정) 띠가 어두운 단추에 묻히지 않는다. */
.editor-toolbar .split-btn .bar{box-shadow:0 0 0 1px color-mix(in srgb,var(--ed-pebble-ink) 26%,transparent);}
/* 그리기 툴바도 같은 조약돌(pebble) 캡슐 가족 */
.draw-toolbar{top:calc(var(--sdy-edbar-bottom, 60px) + 2px);
  background:var(--ed-pebble-bg)!important;border-color:var(--ed-pebble-border)!important;
  border-radius:999px;backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  box-shadow:var(--ed-pebble-shadow-hover)!important;}
.draw-toolbar .tool-btn{color:var(--ed-pebble-ink)!important;border-radius:999px!important;}
.draw-toolbar .tool-btn:hover{background:var(--ed-pebble-subtle)!important;color:var(--ed-pebble-ink-strong)!important;}
.draw-toolbar .tool-sep{background:var(--ed-pebble-sep)!important;}
.draw-toolbar .color-pick:hover,.draw-toolbar .color-pick.sel{border-color:var(--ed-pebble-ink-strong);}
.draw-toolbar .size-opt{background:var(--ed-pebble-subtle);}
.draw-toolbar .size-opt::after{background:var(--ed-pebble-ink);}
.draw-toolbar .size-opt.sel::after{background:var(--accent);}
.editor-toolbar .font-btn,.editor-toolbar #fsInput,.editor-toolbar .pg-nav{
  border:1px solid var(--ed-pebble-border)!important;}
.editor-toolbar .font-btn:hover,.editor-toolbar #fsInput:hover,.editor-toolbar .pg-nav:hover{
  border-color:var(--ed-pebble-border-hover)!important;}
.editor-toolbar #fsInput.mixed{color:var(--ed-pebble-ink3)!important;}
.editor-toolbar .pg-nav button:hover{background:rgba(15,23,42,.06)!important;color:var(--ed-pebble-ink-strong)!important;}
.editor-toolbar #edTitle::placeholder{color:var(--ed-pebble-ink3)!important;}
.editor-toolbar .page-badge{background:var(--ed-pebble-bg)!important;border-color:var(--ed-pebble-border)!important;
  color:var(--ed-pebble-ink)!important;border-radius:999px!important;box-shadow:var(--ed-pebble-shadow)!important;}
/* 14.81.0 · 캔버스 위 '페이지 n / m' 글자와 삭제 버튼 — 어두운 바탕 위라 밝게 (이전 --text3 #64748B 는 묻혔다) */
.page-label{color:var(--canvas-ink)!important;font-size:11.5px!important;letter-spacing:.01em;}
.page-wrap.focused .page-label{color:#fff!important;}
.page-label .page-del{color:var(--canvas-ink3)!important;}
.page-label .page-del:hover{color:#ff8a80!important;background:rgba(231,76,60,.22)!important;}
/* '새 페이지 추가' 상자도 캔버스 위 상자 — 밝은 점선·밝은 글자 */
.add-page-zone{border-color:var(--canvas-line)!important;color:var(--canvas-ink)!important;
  background:rgba(255,255,255,.05)!important;}
.add-page-zone:hover,.add-page-zone.near{border-color:var(--accent)!important;color:#fff!important;
  background:rgba(79,110,247,.20)!important;}
/* 14.81.0 · 편집창 맨 왼쪽의 '실처럼 얇은 흰 선' 제거.
   원인: 접힌 옆 패널(.side-panel, width:0)에 프로 테마가 border-right 1px(var(--border))를 남겨서
   폭 0 짜리 요소의 테두리 1px 이 어두운 캔버스 왼쪽 가장자리에 하얗게 비쳤다.
   접혀 있을 땐 테두리를 없애고, 패널·본문 뒤의 면(.editor-main)도 캔버스 색으로 깐다 — 서브픽셀 틈도 어둡다. */
.editor-main{background:var(--editor-canvas)!important;}
.side-panel:not(.show){border-right-width:0!important;}
/* ── 로고 복사방지 (블로그식) — 드래그·선택·롱프레스 저장 전부 차단 ── */
img.brand-mark,img.brand-wordmark{
  -webkit-user-drag:none;user-select:none;-webkit-user-select:none;
  -webkit-touch-callout:none;pointer-events:none;
}


/* 전체 화면이 모니터 끝에 붙게 — 프로 테마 #mpBig 의 흰 배경·1px 테두리·4px 곡률보다
   구체적이다. 폰 시트(.mpb left/bottom)보다도 이 선택자가 이긴다.
   17.0 모바일 블록 뒤에 두면 그 블록이 파일 끝이 아니게 되어 폰 계약이 깨진다.
   100vw/100dvh 를 다시 넣지 말 것 (zoom·스크롤바에서 왼쪽·아래가 하얗게 남는다). */
html:has(#mpBig.mpb-fs),
body:has(#mpBig.mpb-fs){background:#0a0c13!important;}
body:has(#mpBig.mpb-fs) #wallLayer,
body:has(#mpBig.mpb-fs) #sdyAmbient{opacity:0!important;}
html body #mpBig.mpb-fs,
html body #mpBig:fullscreen,
html body #mpBig:-webkit-full-screen{
  position:fixed!important;
  margin:0!important;
  border:0!important;
  border-radius:0!important;
  outline:none!important;
  box-shadow:none!important;
  background:#0a0c13!important;
  transform:none!important;
  max-width:none!important;
  max-height:none!important;
  z-index:6000!important;
}
html body #mpBig.mpb-fs{
  left:-2px!important;top:-2px!important;right:auto!important;bottom:auto!important;
  width:calc(var(--mpb-fs-w, 100%) + 4px)!important;
  height:calc(var(--mpb-fs-h, 100%) + 4px)!important;
}
html body #mpBig:fullscreen,
html body #mpBig:-webkit-full-screen{
  left:0!important;top:0!important;right:0!important;bottom:0!important;
  width:100%!important;height:100%!important;
}
html body #mpBig .mpb-ctl .pp,
html body #mpBig.mpb-fs .mpb-ctl .pp,
html body #mpBig:fullscreen .mpb-ctl .pp,
html body #mpBig:-webkit-full-screen .mpb-ctl .pp{
  border-radius:50%!important;
  background:transparent!important;
  background-color:transparent!important;
  border:2px solid #fff!important;
  color:#fff!important;
}
html:not(.dark) body #mpBig:not(.mpb-fs):not(:fullscreen) .mpb-ctl .pp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  box-shadow:0 0 0 1px rgba(15,23,42,.42)!important;
  text-shadow:0 0 1px rgba(15,23,42,.85),0 1px 0 rgba(15,23,42,.45);
}

/* ═══════════════════════════════════════════════════════════════════════════
   16.1 · 삼성 뮤직(One UI) 스킨 — 음악 UI 전체 재단장
   ───────────────────────────────────────────────────────────────────────────
   적용 대상(음악 관련 전부)
     · #musicPlayer  하단 컨트롤바 / #mpDisc 플로팅 음반(19.0 · 토큰을 물려준다)
     · #musicListPop 라이브러리(전체 곡·가수별·재생목록) + 검색 + 탭 + 페이지
     · #mpBig        확대 플레이어 "창 모드" (지금 재생 중 · 대기열 · 추천 · 가사)
     · #mpCtx / .pl-mini / #plPickPop  곡 메뉴·재생목록 메뉴
     · #mpEqPop 이퀄라이저 · #mpAddPop 노래 추가 · #mpTagModal 음악 정보 편집
   제외 대상
     · #mpBig.mpb-fs / :fullscreen  → "전체 화면" 은 기존 디자인 그대로 유지
   원칙
     1) HTML 구조·id·클래스·JS 동작은 그대로 둔다 (계약 테스트 보호)
     2) 이 블록은 파일 맨 끝에 두어 기존 규칙을 덮어쓴다
     3) 색·모서리·여백은 One UI 규격(강조 #3B6EF5, 모서리 26px, 큰 터치 영역)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 1. 토큰 ───────────────────────────────────────────────────────────── */
#musicPlayer,#musicListPop,#mpCtx,.pl-mini,#plPickPop,#mpAddPop,#mpTagModal{
  --sm-acc:#3B6EF5;            /* One UI 강조 파랑 */
  --sm-acc2:#7B9CFF;
  --sm-acc-ink:#FFFFFF;
  --sm-acc-soft:rgba(59,110,245,.12);
  --sm-acc-line:rgba(59,110,245,.34);
  --sm-page:#F3F5F9;           /* 화면 배경 */
  --sm-surf:#FFFFFF;           /* 카드/시트 배경 */
  --sm-surf2:#F4F6FA;          /* 안쪽 필드 배경 */
  --sm-surf3:#EAEFF6;
  --sm-t1:#0A0E17;
  --sm-t2:#5C6472;
  --sm-t3:#8C93A1;
  --sm-line:rgba(10,14,23,.10);
  --sm-r-xl:26px;              /* 시트·바 */
  --sm-r-l:20px;               /* 팝오버 */
  --sm-r-m:14px;               /* 카드 */
  --sm-r-s:11px;               /* 작은 요소 */
  --sm-shadow:0 10px 34px rgba(10,14,23,.13),0 2px 8px rgba(10,14,23,.07);
  --sm-row:52px;               /* 목록 한 줄 높이 (One UI 최소 터치) */
  color:var(--sm-t1);
}
.dark #musicPlayer:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark #mpDisc:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark #musicListPop:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark #mpCtx:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark .pl-mini:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark #plPickPop:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark #mpAddPop:not(:where(.sdy-editor-light,.sdy-editor-light *)),.dark #mpTagModal:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #musicPlayer:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #mpDisc:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #musicListPop:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #mpCtx:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark .pl-mini:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #plPickPop:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #mpAddPop:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #mpTagModal:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --sm-acc:#7B9CFF;
  --sm-acc-ink:#0A0E17;
  --sm-acc-soft:rgba(123,156,255,.16);
  --sm-acc-line:rgba(123,156,255,.40);
  --sm-page:#05070D;
  --sm-surf:#161A22;
  --sm-surf2:#222733;
  --sm-surf3:#2C323F;
  --sm-t1:#F3F5F9;
  --sm-t2:#A7AEBC;
  --sm-t3:#767E8C;
  --sm-line:rgba(243,245,249,.12);
  --sm-shadow:0 12px 34px rgba(0,0,0,.55),0 2px 10px rgba(0,0,0,.35);
}
/* 확대 플레이어 창 모드만 — 전체 화면(.mpb-fs / :fullscreen)은 토큰을 물려받지 않는다 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen){
  --sm-acc:#3B6EF5;--sm-acc2:#7B9CFF;--sm-acc-ink:#FFFFFF;
  --sm-acc-soft:rgba(59,110,245,.12);--sm-acc-line:rgba(59,110,245,.34);
  --sm-page:#F3F5F9;--sm-surf:#FFFFFF;--sm-surf2:#F4F6FA;--sm-surf3:#EAEFF6;
  --sm-t1:#0A0E17;--sm-t2:#5C6472;--sm-t3:#8C93A1;
  --sm-line:rgba(10,14,23,.10);--sm-r-xl:26px;--sm-r-l:20px;--sm-r-m:14px;--sm-r-s:11px;
  --sm-shadow:0 10px 34px rgba(10,14,23,.13),0 2px 8px rgba(10,14,23,.07);--sm-row:52px;
}
.dark #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen):not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen):not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --sm-acc:#7B9CFF;--sm-acc-ink:#0A0E17;--sm-acc-soft:rgba(123,156,255,.16);
  --sm-acc-line:rgba(123,156,255,.40);--sm-page:#05070D;--sm-surf:#161A22;
  --sm-surf2:#222733;--sm-surf3:#2C323F;--sm-t1:#F3F5F9;--sm-t2:#A7AEBC;--sm-t3:#767E8C;
  --sm-line:rgba(243,245,249,.12);--sm-shadow:0 12px 34px rgba(0,0,0,.55),0 2px 10px rgba(0,0,0,.35);
}
/* 전체 화면 진입 순간에도 스킨이 스며들지 않게 — 토큰을 앱 기본값으로 되돌린다 */
#mpBig.mpb-fs,#mpBig:fullscreen,#mpBig:-webkit-full-screen{
  --sm-acc:var(--accent);--sm-acc-ink:#fff;--sm-acc-soft:transparent;
  --sm-acc-line:var(--accent);--sm-surf:var(--card);--sm-surf2:var(--bg2);
  --sm-surf3:var(--bg2);--sm-t1:var(--text1);--sm-t2:var(--text2);--sm-t3:var(--text3);
  --sm-line:var(--border);--sm-page:var(--bg);--sm-row:44px;
  --sm-r-xl:14px;--sm-r-l:12px;--sm-r-m:10px;--sm-r-s:8px;--sm-shadow:var(--shadow);
}

/* ── 2. 하단 컨트롤바 (#musicPlayer) ───────────────────────────────────── */
#musicPlayer.mp-bar{
  background:var(--sm-surf);
  border:1px solid var(--sm-line);
  border-radius:var(--sm-r-xl);
  box-shadow:var(--sm-shadow);
  padding:9px 12px;
  gap:12px;
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
#musicPlayer .mp-cover{
  width:50px;height:50px;border-radius:13px;
  box-shadow:0 3px 10px rgba(10,14,23,.16);
  background:var(--sm-surf2);
}
#musicPlayer .mp-mid{gap:3px;display:flex;flex-direction:column;}
#musicPlayer .mp-title{
  font-size:14px;font-weight:700;color:var(--sm-t1);
  letter-spacing:-.02em;
}
/* 16.2 · 삼성뮤직 미니바 두 줄 — 제목 아래 가수 (가수 없으면 자동 숨김) */
#musicPlayer .mp-sub{
  font-size:12px;font-weight:500;color:var(--sm-t3);letter-spacing:-.01em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
#musicPlayer .mp-sub:empty{display:none;}
#musicPlayer .mp-badge{
  background:var(--sm-acc-soft);color:var(--sm-acc);
  border:1px solid var(--sm-acc-line);
  border-radius:99px;font-size:9px;font-weight:800;letter-spacing:.02em;
}
#musicPlayer .mp-prog{
  height:3px;border-radius:99px;background:var(--sm-surf3);margin-top:1px;
}
#musicPlayer .mp-prog:hover,#musicPlayer .mp-prog.seeking{height:6px;}
#musicPlayer .mp-buf{background:rgba(140,147,161,.28);}
#musicPlayer #mpFill{background:var(--sm-acc);border-radius:99px;}
#musicPlayer .mp-knob{
  width:12px;height:12px;background:var(--sm-acc);border:2px solid var(--sm-surf);
  box-shadow:0 1px 4px rgba(10,14,23,.28);
}
#musicPlayer .mp-time{font-size:10.5px;color:var(--sm-t3);font-weight:600;}
#musicPlayer .mp-time #mpCur{color:var(--sm-t2);font-weight:700;}
#musicPlayer .mp-time #mpDur{color:var(--sm-t3);font-weight:600;}
#musicPlayer .mp-seektip{
  background:var(--sm-t1);color:var(--sm-surf);border-radius:8px;
  font-size:10.5px;font-weight:700;padding:3px 7px;
}
/* 버튼: 이전/재생/다음 + 목록 + 더보기 + 펼치기 */
#musicPlayer .mp-btns{gap:2px;}
#musicPlayer .mp-btns button,#musicPlayer #mpX{
  width:36px;height:36px;border-radius:50%;
  color:var(--sm-t2);background:transparent;
  font-size:17px;transition:background .15s ease,color .15s ease,transform .12s ease;
}
#musicPlayer .mp-btns button:hover,#musicPlayer #mpX:hover{
  background:var(--sm-surf2);color:var(--sm-t1);
}
#musicPlayer .mp-btns button.on,#musicPlayer .mp-xtra-btn.on{
  background:var(--sm-acc-soft);color:var(--sm-acc);
}
/* 16.2 레거시 하단 재생 버튼. 16.3 Samsung mini-player pass에서 평면 글리프로 재정의;
   !important 규칙은 mp-bar에만 한정해 원형 플로팅 플레이어를 보호한다. */
#musicPlayer.mp-bar .mp-btns .mp-pp{
  width:44px!important;height:44px!important;font-size:21px!important;
  background:var(--sm-acc)!important;background-color:var(--sm-acc)!important;
  color:var(--sm-acc-ink)!important;border:0!important;
  box-shadow:0 5px 14px rgba(59,110,245,.35)!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
  border-radius:50%!important;
}
#musicPlayer.mp-bar .mp-btns .mp-pp:hover{
  background:var(--sm-acc)!important;background-color:var(--sm-acc)!important;
  color:var(--sm-acc-ink)!important;filter:brightness(1.07)!important;
}
#musicPlayer .mp-rate{font-size:11px!important;font-weight:800;color:var(--sm-t2);}
/* 더보기 묶음 = 떠 있는 One UI 카드 */
#musicPlayer .mp-xtra{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-l);box-shadow:var(--sm-shadow);
  padding:7px;gap:5px;
}
#musicPlayer .mp-xtra button{
  background:var(--sm-surf2)!important;color:var(--sm-t2);
  border:1px solid transparent;border-radius:12px;
}
#musicPlayer .mp-xtra button:hover{background:var(--sm-surf3)!important;color:var(--sm-t1);}
#musicPlayer .mp-xtra button.on{
  background:var(--sm-acc-soft)!important;color:var(--sm-acc)!important;
  border-color:var(--sm-acc-line)!important;box-shadow:none;
}
/* 볼륨 팝오버 */
#musicPlayer .mp-volpop,#mpVolPop{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-l);box-shadow:var(--sm-shadow);padding:10px 8px;
}
#mpVolPop input{accent-color:var(--sm-acc);}
/* 플로팅 음반(#mpDisc)은 19.0 블록이 직접 만든다 — 여기서는 위 토큰만 물려준다. */
/* 해돌이 말풍선은 스킨과 어울리게 */
#musicPlayer .mp-otter .otter-bubble{color:var(--sm-t1);}

/* ── 3. 라이브러리 (#musicListPop) — One UI 목록 화면 ──────────────────── */
#musicListPop.mp-list{
  background:var(--sm-page);
  border:1px solid var(--sm-line);
  border-radius:var(--sm-r-xl);
  box-shadow:var(--sm-shadow);
  padding:12px 12px 8px;
  width:min(460px,92vw);
}
/* 검색 = 테두리 없는 회색 필 알약 */
#musicListPop .mp-library-tools{
  display:flex;align-items:center;gap:8px;
  background:var(--sm-surf2);
  border:1px solid transparent;
  border-radius:99px;
  padding:0 8px 0 14px;
  margin-bottom:10px;
  min-height:44px;
  transition:border-color .15s ease,background .15s ease;
}
#musicListPop .mp-library-tools:focus-within{
  border-color:var(--sm-acc-line);
  background:var(--sm-surf);
}
#musicListPop .mp-search-icon{color:var(--sm-t3);font-size:16px;}
#musicListPop .mp-search{
  flex:1;min-width:0;border:0;background:transparent;outline:none;
  color:var(--sm-t1);font-size:14px;font-weight:500;padding:0;margin:0;
}
#musicListPop .mp-search::placeholder{color:var(--sm-t3);font-weight:500;}
#musicListPop .mp-library-tools .mp-sortbtn{
  width:30px;height:30px;flex:none;border:0;border-radius:50%;
  background:transparent;color:var(--sm-t2);font-size:15px;
}
#musicListPop .mp-library-tools .mp-sortbtn:hover{background:var(--sm-surf3);color:var(--sm-t1);}
/* 탭 = One UI 필터 칩 */
#musicListPop .mp-tabs{gap:7px;margin-bottom:9px;padding:0 2px;}
#musicListPop .mp-tabs button{
  border:1px solid var(--sm-line);
  background:var(--sm-surf);
  color:var(--sm-t2);
  border-radius:99px;
  padding:7px 14px;
  font-size:12.5px;font-weight:600;
  letter-spacing:-.01em;
  transition:background .15s ease,color .15s ease,border-color .15s ease;
}
#musicListPop .mp-tabs button:hover{background:var(--sm-surf2);color:var(--sm-t1);}
#musicListPop .mp-tabs button.on{
  background:var(--sm-acc);color:var(--sm-acc-ink);
  border-color:var(--sm-acc);font-weight:700;
}
#musicListPop .mp-addpl{
  width:32px;height:32px;border-radius:50%;
  background:var(--sm-surf);border:1px solid var(--sm-line);
  color:var(--sm-acc);font-size:16px;
}
#musicListPop .mp-addpl:hover{background:var(--sm-acc-soft);border-color:var(--sm-acc-line);}
/* 목록 본체 */
#musicListPop .mp-lbody{
  background:var(--sm-surf);
  border:1px solid var(--sm-line);
  border-radius:var(--sm-r-m);
  padding:5px;
}
/* 한 줄 = 표지 40 + 제목 + 가수 + 더보기 */
#musicListPop .mp-li{
  display:flex;align-items:center;gap:11px;
  padding:6px 8px;min-height:var(--sm-row);
  border-radius:var(--sm-r-s);
  font-size:14px;color:var(--sm-t1);
  letter-spacing:-.01em;
}
#musicListPop .mp-li:hover{background:var(--sm-surf2);}
#musicListPop .mp-li.on{background:var(--sm-acc-soft);color:var(--sm-acc);font-weight:700;}
#musicListPop .mp-li .mp-art{
  width:40px;height:40px;flex:none;border-radius:9px;object-fit:cover;
  background:var(--sm-surf3);box-shadow:0 1px 4px rgba(10,14,23,.12);
}
#musicListPop .mp-li .mp-tx{
  flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;
}
#musicListPop .mp-li .mp-tx>b{
  display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:14px;font-weight:600;letter-spacing:-.015em;
}
#musicListPop .mp-li.on .mp-tx>b{color:var(--sm-acc);font-weight:700;}
#musicListPop .mp-li .mp-tx>em{
  display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-style:normal;font-size:12px;color:var(--sm-t3);font-weight:500;
}
#musicListPop .mp-li.on .mp-tx>em{color:var(--sm-acc);opacity:.75;}
/* 우측 보조 아이콘(태그·담기·삭제) — One UI 더보기 버튼 */
#musicListPop .mp-li i.pl-add,
#musicListPop .mp-li i[data-tag],
#musicListPop .mp-li .mp-del{
  width:32px;height:32px;flex:none;
  display:inline-flex;align-items:center;justify-content:center;
  border-radius:50%;font-size:15px!important;color:var(--sm-t3);
  padding:0!important;transition:background .15s ease,color .15s ease;
}
#musicListPop .mp-li i.pl-add:hover{background:var(--sm-acc-soft);color:var(--sm-acc);}
#musicListPop .mp-li i[data-tag]:hover{background:var(--sm-surf3);color:var(--sm-t1);}
#musicListPop .mp-li .mp-del:hover{background:rgba(214,69,69,.12);color:#d64545;}
#musicListPop .mp-li .mp-cur{color:var(--sm-acc);}
#musicListPop .mp-upmark{
  display:inline-flex;align-items:center;gap:3px;flex:none;
  font-size:10px;font-weight:700;color:var(--sm-t3);
  background:var(--sm-surf2);border-radius:99px;padding:2px 7px;
}
#musicListPop .mp-upmark i{font-size:11px;}
/* 재생목록(폴더) 줄 */
#musicListPop .mp-pl{
  display:flex;align-items:center;gap:11px;
  padding:6px 8px;min-height:var(--sm-row);
  border-radius:var(--sm-r-s);
  font-size:14px;color:var(--sm-t1);
}
#musicListPop .mp-pl:hover{background:var(--sm-surf2);}
#musicListPop .mp-pl.open{background:var(--sm-surf2);}
#musicListPop .mp-pl.on{background:var(--sm-acc-soft);color:var(--sm-acc);font-weight:700;}
#musicListPop .mp-pl b{font-size:14px;font-weight:600;letter-spacing:-.015em;}
#musicListPop .mp-pl em{font-size:12px;color:var(--sm-t3);}
#musicListPop .mp-pl i{
  width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:50%;font-size:16px;color:var(--sm-t3);padding:0;
}
#musicListPop .mp-pl i:hover{background:var(--sm-surf3);color:var(--sm-t1);}
#musicListPop .mp-pl .pl-play{color:var(--sm-acc);}
#musicListPop .mp-pl .pl-play:hover{background:var(--sm-acc-soft);color:var(--sm-acc);}
#musicListPop .mp-pl.drop{outline:2px dashed var(--sm-acc);outline-offset:-2px;background:var(--sm-acc-soft);}
#musicListPop .mp-plsub{
  padding:5px 8px 5px 59px;min-height:42px;
  border-radius:var(--sm-r-s);font-size:13px;color:var(--sm-t2);
}
#musicListPop .mp-plsub:hover{background:var(--sm-surf2);}
#musicListPop .mp-plsub.on{color:var(--sm-acc);font-weight:700;}
#musicListPop .mp-plsub .pl-rm{
  width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:50%;color:var(--sm-t3);
}
#musicListPop .mp-plsub .pl-rm:hover{background:rgba(214,69,69,.12);color:#d64545;}
#musicListPop .mp-plsub.empty{color:var(--sm-t3);}
#musicListPop .mp-plempty,#musicListPop .mp-emptybox{
  color:var(--sm-t3);font-size:13px;padding:26px 14px;line-height:1.7;
}
#musicListPop .mp-emptybox b{color:var(--sm-t1);font-size:15px;}
#musicListPop .mp-emptybox button{
  background:var(--sm-acc);border-color:var(--sm-acc);color:var(--sm-acc-ink);
  border-radius:99px;padding:9px 20px;font-weight:700;
}
/* 라이브러리 안의 추천 가로 스크롤 */
#musicListPop .mp-discover{
  background:transparent;border-bottom:1px solid var(--sm-line);
  padding:4px 4px 12px;margin-bottom:4px;
}
#musicListPop .mp-dis-head b{font-size:17px;font-weight:800;letter-spacing:-.03em;color:var(--sm-t1);}
#musicListPop .mp-dis-head span{font-size:10px;color:var(--sm-t3);}
#musicListPop .mp-rec-title{font-size:12.5px;font-weight:700;color:var(--sm-t2);letter-spacing:-.01em;}
#musicListPop .mp-rec-card{width:96px;min-width:96px;}
#musicListPop .mp-rec-card img{
  width:96px;height:96px;border-radius:12px;
  box-shadow:0 4px 12px rgba(10,14,23,.14);
}
#musicListPop .mp-rec-card span{font-size:11.5px;font-weight:700;color:var(--sm-t1);letter-spacing:-.01em;}
#musicListPop .mp-rec-card em{font-size:10.5px;color:var(--sm-t3);}
/* 페이지 이동 */
#musicListPop .mp-lfoot{
  gap:8px;padding-top:8px;font-size:11.5px;color:var(--sm-t3);
}
#musicListPop .mp-lfoot button{
  border:1px solid var(--sm-line);background:var(--sm-surf);color:var(--sm-t2);
  border-radius:99px;padding:6px 14px;font-size:11.5px;font-weight:700;
}
#musicListPop .mp-lfoot button:hover{background:var(--sm-surf2);color:var(--sm-t1);}
#musicListPop .mp-goto{color:var(--sm-t3);}
#musicListPop .mp-goto input{
  border:1px solid var(--sm-line);background:var(--sm-surf);color:var(--sm-t1);
  border-radius:9px;
}
/* 재생목록 선택 팝오버 */
#plPickPop{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-l);box-shadow:var(--sm-shadow);padding:6px;
}
.plpick-item{
  min-height:44px;border-radius:var(--sm-r-s);font-size:13.5px;color:var(--sm-t1);
}
.plpick-item:hover{background:var(--sm-surf2);}
.plpick-item.on,.plpick-item.new{background:var(--sm-acc-soft);color:var(--sm-acc);}
.plpick-item em{color:var(--sm-t3);}

/* ── 4. 확대 플레이어 "창 모드" (#mpBig, 전체 화면 제외)
      16.2 · 삼성뮤직 재생 화면으로 세로 재배치: 표지 → 제목 → 가수 → 진행바 →
      컨트롤(가운데 파랑 원) → 보조 줄 → 탭·목록. 헤더 손잡이는 그대로 둔다. ── */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen){
  background:var(--sm-surf);
  border:1px solid var(--sm-line);
  border-radius:var(--sm-r-xl);
  box-shadow:var(--sm-shadow);
  overflow:hidden;
  color:var(--sm-t1);
}
/* 상단 그랩 핸들 — One UI 시트의 작은 막대 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head{
  position:relative;
  padding:10px 8px 4px;
  background:transparent;border-bottom:0;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head::before{
  content:'';position:absolute;left:50%;top:5px;transform:translateX(-50%);
  width:38px;height:4px;border-radius:99px;background:var(--sm-surf3);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head>i{display:none;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head-title{
  font-size:12px;font-weight:800;letter-spacing:.04em;color:var(--sm-t3);
  text-transform:none;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head button{
  width:30px;height:30px;border-radius:50%;color:var(--sm-t2);background:transparent;
  font-size:16px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head button:hover{
  background:var(--sm-surf2)!important;color:var(--sm-t1)!important;opacity:1!important;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head .mpb-mini{
  width:24px;height:24px;min-width:24px;border-radius:50%;opacity:1;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-head .mpb-mini:hover{
  background:var(--sm-surf2);color:var(--sm-acc);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-body{padding:6px 16px 12px;gap:10px;overflow-x:hidden;overflow-y:auto;}
/* 지금 재생 중 — 삼성뮤직 재생 화면: 표지 → 제목 → 가수 → 진행바 → 컨트롤 (세로·가운데) */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-stage{
  display:flex;justify-content:center;min-width:0;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-now{
  flex-direction:column;align-items:stretch;justify-content:flex-start;
  width:100%;gap:10px;padding:10px 4px 4px;text-align:center;
  background:none;border:0;border-radius:0;box-shadow:none;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap .mpb-cover{
  width:216px;height:216px;margin:0 auto;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cover{
  border-radius:14px;
  box-shadow:0 14px 34px rgba(10,14,23,.24);
  filter:none;
  background:var(--sm-surf2);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap{filter:none;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-vinyl{display:none;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-meta{
  width:100%;gap:2px;justify-content:flex-start;align-items:center;text-align:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-title{
  font-size:19px;font-weight:800;letter-spacing:-.035em;color:var(--sm-t1);
  text-align:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-artist{
  font-size:13.5px;font-weight:600;letter-spacing:-.02em;color:var(--sm-t2);
  text-align:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album{
  font-size:11.5px;color:var(--sm-t3);letter-spacing:-.01em;text-align:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-chips{
  justify-content:center;min-height:0;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-chips:empty{display:none;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-chips span{
  background:var(--sm-surf2);border:1px solid var(--sm-line);
  color:var(--sm-t3);border-radius:99px;font-size:9.5px;font-weight:700;padding:2px 8px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-chips span.src{
  color:var(--sm-acc);border-color:var(--sm-acc-line);background:var(--sm-acc-soft);
}
/* 진행바 — 삼성뮤직처럼 가늘고 단색, 손잡이(노브)는 잡을 때만 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-prog{
  width:100%;height:4px;border-radius:99px;background:var(--sm-surf3);
  margin:8px 0 0;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-prog.seeking{height:7px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBFill{
  background:var(--sm-acc);border-radius:99px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBKnob{
  background:var(--sm-acc);border:2px solid var(--sm-surf);
  box-shadow:0 1px 5px rgba(10,14,23,.3);
  opacity:0;transition:opacity .15s ease;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-prog:hover #mpBKnob,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-prog.seeking #mpBKnob{opacity:1;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time{
  background:var(--sm-t1);color:var(--sm-surf);border-radius:9px;padding:3px 8px;
  font-size:11px;font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time .current{color:var(--sm-surf);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time .end{color:var(--sm-surf);opacity:.65;}
/* 재생 컨트롤 — 가운데 큰 원형 재생 버튼(삼성뮤직) · 양옆 검색·다음 아이콘 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl{
  gap:12px;margin-top:8px;justify-content:center;align-items:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button{
  width:44px;height:44px;border-radius:50%;color:var(--sm-t2);
  background:transparent;font-size:20px;
  transition:background .15s ease,color .15s ease,transform .12s ease;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button:hover{
  background:var(--sm-surf2);color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button.on{
  background:var(--sm-acc-soft);color:var(--sm-acc);
}
/* 16.2 레거시 선언: 16.3 창 모드 마감 스킨에서 삼성뮤직의 무테 재생 글리프로
   재정의한다. 이 일반 규칙은 전체 화면까지 공유하므로 계약상 보존한다. */
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp{
  width:58px;height:58px;font-size:26px;
  background:var(--sm-acc)!important;background-color:var(--sm-acc)!important;
  color:var(--sm-acc-ink)!important;
  border:0!important;
  box-shadow:0 8px 20px rgba(59,110,245,.36)!important;
  text-shadow:none!important;
}
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp:hover,
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp:focus-visible{
  background:var(--sm-acc)!important;background-color:var(--sm-acc)!important;
  color:var(--sm-acc-ink)!important;border:0!important;
  box-shadow:0 8px 20px rgba(59,110,245,.36)!important;
  filter:brightness(1.07);text-shadow:none!important;
}
/* 부가 줄(속도·이퀄·타이머·볼륨) — 가운데 정렬, 알약·원 버튼 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2{
  justify-content:center;align-items:center;flex-wrap:wrap;gap:6px;margin-top:6px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 button{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;height:30px;padding:0 12px;font-size:11.5px;font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 button:hover{
  background:var(--sm-surf3);color:var(--sm-t1);border-color:var(--sm-line);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 button.on{
  background:var(--sm-acc-soft);color:var(--sm-acc);border-color:var(--sm-acc-line);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 .mpb-ric{
  width:34px;height:34px;padding:0;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-vol{
  color:var(--sm-t3);flex:0 1 160px;min-width:90px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-vol input{accent-color:var(--sm-acc);}
/* 탭 = One UI 필터 칩 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-tabs{gap:7px;padding:1px 0 2px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-tabs button{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;padding:7px 13px;font-size:12.5px;font-weight:600;
  letter-spacing:-.01em;white-space:nowrap;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-tabs button:hover{
  background:var(--sm-surf3);color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-tabs button.on{
  background:var(--sm-acc);color:var(--sm-acc-ink);border-color:var(--sm-acc);font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-tabs button.mpb-icon{
  width:32px;height:32px;padding:0;border-radius:50%;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-tabs button.mpb-icon.on{
  background:var(--sm-acc-soft);color:var(--sm-acc);border-color:var(--sm-acc-line);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBUp{
  border:1px solid var(--sm-line)!important;background:var(--sm-surf2)!important;
  color:var(--sm-t2)!important;border-radius:99px!important;padding:6px 13px!important;
  font-size:11.5px!important;font-weight:700!important;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBUp:hover{
  background:var(--sm-acc-soft)!important;color:var(--sm-acc)!important;
  border-color:var(--sm-acc-line)!important;
}
/* 검색 줄 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar{
  background:var(--sm-surf2);border:1px solid transparent;
  border-radius:99px;padding:0 8px 0 14px;min-height:42px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar:focus-within{
  border-color:var(--sm-acc-line);background:var(--sm-surf);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar>i{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar input{
  color:var(--sm-t1);font-size:13.5px;font-weight:500;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar input::placeholder{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchcnt{color:var(--sm-t3);font-size:11px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar button{
  width:30px;height:30px;border-radius:50%;color:var(--sm-t3);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar button:hover{
  background:var(--sm-surf3);color:var(--sm-t1);
}
/* 목록 본문 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-list{
  border-top:1px solid var(--sm-line);padding-top:7px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-li{
  display:flex;align-items:center;gap:11px;
  padding:6px 8px;min-height:48px;border-radius:var(--sm-r-s);
  font-size:14px;color:var(--sm-t1);letter-spacing:-.01em;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-li:hover{background:var(--sm-surf2);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-li.on{
  background:var(--sm-acc-soft);color:var(--sm-acc);font-weight:700;
  box-shadow:inset 3px 0 0 var(--sm-acc);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-li.on .mp-eqbars i{
  background:var(--sm-acc);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-li em{
  color:var(--sm-t3);font-size:12px;font-weight:500;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-li.on em{color:var(--sm-acc);opacity:.75;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-qhead{
  font-size:11.5px;color:var(--sm-t3);font-weight:600;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-qclear{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;padding:5px 11px;font-size:11px;font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-qclear:hover{
  background:var(--sm-acc-soft);color:var(--sm-acc);border-color:var(--sm-acc-line);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-qop{
  width:28px;height:28px;border-radius:50%;color:var(--sm-t3);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-qop:hover{
  background:var(--sm-surf3);color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-artgrp{
  font-size:11.5px;font-weight:800;color:var(--sm-t2);letter-spacing:.02em;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-artgrp em{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-empty{color:var(--sm-t3);font-size:12.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-pager{
  gap:10px;font-size:11.5px;color:var(--sm-t3);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-pager button{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;padding:6px 13px;font-size:11.5px;font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-pager button:hover{
  background:var(--sm-surf3);color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-goto{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-goto input{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t1);border-radius:9px;
}
/* 가사 */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-lyrhead{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-lyr .ll{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-lyr .ll.now{color:var(--sm-t1);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-lyrempty{color:var(--sm-t3);}

/* ── 5. 추천(둘러보기) 카드 — One UI 카드 규격 ─────────────────────────── */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-top small{
  color:var(--sm-acc);font-size:9.5px;font-weight:900;letter-spacing:.12em;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-top h2{
  font-size:23px;font-weight:800;letter-spacing:-.045em;color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-top p{color:var(--sm-t3);font-size:11.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-refresh{
  width:34px;height:34px;border:1px solid var(--sm-line);background:var(--sm-surf2);
  color:var(--sm-t2);border-radius:50%;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-refresh:hover{
  background:var(--sm-acc-soft);color:var(--sm-acc);border-color:var(--sm-acc-line);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-current{
  border:1px solid var(--sm-line);border-radius:var(--sm-r-m);
  background:var(--sm-surf2);padding:8px 10px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-current-art{
  width:38px;height:38px;border-radius:10px;background:var(--sm-acc);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-current small{color:var(--sm-t3);font-size:9.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-current b{color:var(--sm-t1);font-size:12.5px;font-weight:700;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-current span{color:var(--sm-t3);font-size:10.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-group-chip{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;padding:7px 12px;font-size:11.5px;font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-group-chip i{color:var(--sm-acc);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-group-chip em{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-group-chip.on{
  background:var(--sm-acc);color:var(--sm-acc-ink);border-color:var(--sm-acc);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-group-chip.on i,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-group-chip.on em{color:var(--sm-acc-ink);opacity:.85;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-random-hero{
  border:1px solid var(--sm-line);background:var(--sm-surf2);border-radius:var(--sm-r-m);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-random-hero:hover{
  border-color:var(--sm-acc-line);background:var(--sm-acc-soft);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-random-hero .mrh-tx b{color:var(--sm-t1);font-size:12.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-random-hero .mrh-tx em{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-head b{
  font-size:15px;font-weight:800;letter-spacing:-.03em;color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-head span{color:var(--sm-t3);font-size:10.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-art,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-art{
  width:118px;height:118px;border-radius:14px;
  background:var(--sm-surf3);
  box-shadow:0 6px 16px rgba(10,14,23,.14);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-art{border-radius:12px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-playlist-card .mpb-album-art{
  border-radius:18px;background:var(--sm-acc-soft);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-art>i:first-child,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-art>i:first-child{color:var(--sm-t3);opacity:.7;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-card>b,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-card>b{
  font-size:12px;font-weight:700;color:var(--sm-t1);letter-spacing:-.015em;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-card>em,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-card>em{color:var(--sm-t3);font-size:10.5px;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-card>small{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-empty{color:var(--sm-t3);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-empty b{color:var(--sm-t1);}

/* ── 6. 곡 메뉴(#mpCtx) · 재생목록 메뉴(.pl-mini) — One UI 리스트 ──────── */
#mpCtx{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-l);box-shadow:var(--sm-shadow);
  padding:6px;min-width:220px;
  color:var(--sm-t1);
}
#mpCtx .cinfo{
  padding:9px 12px 10px;border-bottom:1px solid var(--sm-line);margin-bottom:5px;
}
#mpCtx .cinfo b{font-size:13.5px;font-weight:700;color:var(--sm-t1);letter-spacing:-.015em;}
#mpCtx .cinfo span{font-size:11px;color:var(--sm-t3);}
#mpCtx .ci{
  display:flex;align-items:center;gap:12px;
  padding:10px 12px;min-height:46px;border-radius:var(--sm-r-s);
  font-size:13.5px;font-weight:500;color:var(--sm-t1);
}
#mpCtx .ci i{color:var(--sm-t3);font-size:17px;}
#mpCtx .ci:hover{background:var(--sm-surf2);}
#mpCtx .ci:hover i{color:var(--sm-acc);}
#mpCtx .ci.danger,#mpCtx .ci.danger i{color:#d64545;}
#mpCtx .ci.danger:hover{background:rgba(214,69,69,.10);}
#mpCtx .csep{background:var(--sm-line);margin:5px 8px;}
.pl-mini{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-l);box-shadow:var(--sm-shadow);padding:6px;
}
.pl-mini button{
  border-radius:var(--sm-r-s);font-size:13.5px;color:var(--sm-t1);
  padding:11px 12px;min-height:44px;font-weight:500;
}
.pl-mini button:hover{background:var(--sm-surf2);}
.pl-mini button.d{color:#d64545;}

/* ── 7. 이퀄라이저 팝오버(#mpEqPop) ───────────────────────────────────── */
/* 이퀄라이저 팝오버는 확대 플레이어 "안"에 있으므로 항상 창 모드에서만 색을 입힌다.
   전체 화면의 이퀄라이저(#mpBig.mpb-fs .mp-eqpop)는 기존 흰색 계열을 그대로 쓴다. */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpEqPop{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-l);box-shadow:var(--sm-shadow);
  color:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpEqPop .eq-top>i{color:var(--sm-acc);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpEqPop .eq-top b{color:var(--sm-t1);font-size:13.5px;font-weight:800;letter-spacing:-.02em;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpEqPop .eq-top .eq-preset-name{color:var(--sm-acc);font-size:11px;font-weight:700;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpEqPop .eq-mini{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;font-size:11px;font-weight:700;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpEqPop .eq-mini:hover{background:var(--sm-surf3);color:var(--sm-t1);}

/* ── 8. 노래 추가(#mpAddPop) · 음악 정보 편집(#mpTagModal) ────────────── */
#mpAddPop{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-xl);box-shadow:var(--sm-shadow);
  color:var(--sm-t1);
}
#mpAddPop .head{color:var(--sm-t1);font-size:15px;font-weight:800;letter-spacing:-.03em;}
#mpAddPop .head>i{color:var(--sm-acc);}
#mpAddPop .head button{border-radius:50%;color:var(--sm-t3);}
#mpAddPop .head button:hover{background:var(--sm-surf2);}
#mpAddPop .file{
  border:1px solid var(--sm-line);background:var(--sm-surf2);
  border-radius:var(--sm-r-m);
}
#mpAddPop .file:hover{border-color:var(--sm-acc-line);background:var(--sm-acc-soft);}
#mpAddPop .file>i{color:var(--sm-acc);}
#mpAddPop .file span{color:var(--sm-t1);font-size:13.5px;font-weight:700;}
#mpAddPop .file em{color:var(--sm-t3);}
#mpAddPop input[type=text]{
  border:1px solid transparent;background:var(--sm-surf2);color:var(--sm-t1);
  border-radius:99px;
}
#mpAddPop input[type=text]:focus{border-color:var(--sm-acc-line);background:var(--sm-surf);}
#mpAddPop .go{
  background:var(--sm-acc);color:var(--sm-acc-ink);border:0;border-radius:99px;font-weight:700;
}
#mpAddPop .qbar{background:var(--sm-surf3);border-radius:99px;}
#mpAddPop .qfill{background:var(--sm-acc);border-radius:99px;}
#mpAddPop .qmeta b{color:var(--sm-t1);}
#mpAddPop .qmeta span{color:var(--sm-t3);}
#mpTagModal .box{
  background:var(--sm-surf);border:1px solid var(--sm-line);
  border-radius:var(--sm-r-xl);box-shadow:var(--sm-shadow);
}
#mpTagModal .head{border-bottom:1px solid var(--sm-line);color:var(--sm-t1);}
#mpTagModal .head b i{color:var(--sm-acc);}
#mpTagModal .head button{border-radius:50%;color:var(--sm-t3);}
#mpTagModal .head button:hover{background:var(--sm-surf2);color:var(--sm-t1);}
#mpTagModal label{color:var(--sm-t2);}
#mpTagModal label em{color:var(--sm-t3);}
#mpTagModal .crow img{border-radius:14px;box-shadow:0 6px 16px rgba(10,14,23,.16);}
#mpTagModal .cbtns button,
#mpTagModal input[type=text],#mpTagModal textarea,
#mpTagModal input[type=url]{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t1);
  border-radius:var(--sm-r-s);
}
#mpTagModal .cbtns button:hover{background:var(--sm-surf3);color:var(--sm-t1);border-color:var(--sm-line);}
#mpTagModal input[type=text]:focus,#mpTagModal textarea:focus,
#mpTagModal input[type=url]:focus{border-color:var(--sm-acc);}
#mpTagModal .hint{color:var(--sm-t3);}
#mpTagModal .acts{border-top:1px solid var(--sm-line);}
#mpTagModal .acts button{
  border:1px solid var(--sm-line);background:var(--sm-surf2);color:var(--sm-t2);
  border-radius:99px;font-weight:700;
}
#mpTagModal .acts button:hover{background:var(--sm-surf3);color:var(--sm-t1);}
#mpTagModal .acts button.primary{
  background:var(--sm-acc);border-color:var(--sm-acc);color:var(--sm-acc-ink);
}
#mpTagModal #mpTagUrlBtn{
  border:1px solid var(--sm-line)!important;background:var(--sm-surf2)!important;
  color:var(--sm-t1)!important;border-radius:99px!important;
}
#mpTagModal #mpTagUrlInput{
  border:1px solid transparent!important;background:var(--sm-surf2)!important;
  color:var(--sm-t1)!important;border-radius:99px!important;
}
#mpTagModal #mpTagUrlInput:focus{border-color:var(--sm-acc-line)!important;background:var(--sm-surf)!important;}

/* ── 9. 폰 — One UI 하단 시트 규격으로 정리 (기존 phone 블록 이후 적용) ── */
@media(max-width:640px){
  #musicListPop.mp-list{
    border-radius:var(--sm-r-xl) var(--sm-r-xl) 0 0;
    background:var(--sm-page);
    border-left:0;border-right:0;border-bottom:0;
  }
  /* 시트 그랩 핸들 */
  #musicListPop.mp-list::before{
    content:'';display:block;width:38px;height:4px;border-radius:99px;
    background:var(--sm-surf3);margin:0 auto 10px;
  }
  #musicListPop .mp-library-tools{min-height:46px;border-radius:99px;}
  #musicListPop .mp-tabs button{min-height:40px;padding:8px 15px;font-size:13px;}
  #musicListPop .mp-li,#musicListPop .mp-pl{min-height:var(--sm-row);gap:12px;}
  #musicListPop .mp-li .mp-art{width:44px;height:44px;border-radius:10px;}
  #musicListPop .mp-li .mp-tx>b{font-size:14.5px;}
  #musicListPop .mp-li .mp-tx>em{font-size:12.5px;}
  #musicListPop .mp-lfoot button{min-height:40px;padding:7px 15px;}
  /* 하단 컨트롤바 — 화면 폭을 쓰는 One UI 재생 바 */
  #musicPlayer.mp-bar{
    width:auto!important;left:10px!important;right:10px!important;
    transform:none!important;
    border-radius:var(--sm-r-l)!important;
    padding:8px 10px!important;
  }
  #musicPlayer .mp-cover{width:46px;height:46px;border-radius:12px;}
  #musicPlayer .mp-title{font-size:13.5px;}
  #musicPlayer .mp-sub{font-size:11.5px;}
  /* 삼성뮤직 미니바는 시간 텍스트 없이 두 줄 + 진행선만 (72px 스택 안에 들어오게) */
  #musicPlayer .mp-time{display:none;}
  #musicPlayer .mp-btns button,#musicPlayer #mpX{width:34px;height:34px;font-size:16px;}
  #musicPlayer .mp-btns .mp-pp{width:40px;height:40px;font-size:19px;}
  /* 확대 플레이어 창 — 폰에서도 삼성뮤직 세로 재생 화면.
     17.0 최종 모바일 블록의 .mpb-cwrap 92px!important 를 이기도록
     같은 중요도 + 높은 특이도로만 되챈다 (전체 화면은 :not 으로 제외) */
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap,
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap .mpb-cover{
    width:min(56vw,210px)!important;height:min(56vw,210px)!important;
    margin:0 auto;
  }
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-body{padding:6px 10px 10px;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-title{font-size:16.5px!important;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-searchbar{min-height:46px;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl{gap:8px;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button{width:46px;height:46px;}
  html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp{
    width:54px!important;height:54px!important;font-size:24px!important;
  }
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 button{
    height:40px;min-width:40px;padding:0 13px;font-size:12px;
  }
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 .mpb-ric{
    width:40px;height:40px;
  }
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-art,
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-art{width:100px;height:100px;}
}

/* 표지 썸네일 안의 이미지 (16.1 목록 줄) */
#musicListPop .mp-li .mp-art{position:relative;display:block;overflow:hidden;padding:0;}
#musicListPop .mp-li .mp-art img{
  width:100%;height:100%;object-fit:cover;display:block;border:0;border-radius:inherit;
  box-shadow:none;background:transparent;
}
#musicListPop .mp-li .mp-tx>b .nowic{margin-right:5px;font-size:13px;}

/* ═══════════════════════════════════════════════════════════════════════════
   16.3 · Samsung Music now-playing fidelity pass
   Only the windowed expanded player and bottom mini-player are themed here.
   The approved drag handle and every fullscreen selector remain untouched.
   ═══════════════════════════════════════════════════════════════════════════ */
#musicPlayer.mp-bar{
  --sm-mini-color:var(--sm-minicolor,#7c4dff);
  color:#fff;
  background:
    linear-gradient(105deg,
      color-mix(in srgb,var(--sm-mini-color) 78%,#10121b),
      color-mix(in srgb,var(--sm-mini-color) 60%,#171923))!important;
  border:1px solid color-mix(in srgb,#fff 13%,transparent)!important;
  border-radius:18px!important;
  box-shadow:0 8px 24px rgba(0,0,0,.22)!important;
  padding:8px 12px!important;
  gap:10px!important;
}
#musicPlayer.mp-bar .mp-cover{
  width:40px;height:40px;border-radius:50%;
  box-shadow:0 1px 4px rgba(0,0,0,.18);
}
#musicPlayer.mp-bar .mp-mid{gap:1px;min-width:96px;}
#musicPlayer.mp-bar .mp-title{
  color:#fff;font-size:13px;font-weight:700;letter-spacing:-.015em;
}
#musicPlayer.mp-bar .mp-sub{color:rgba(255,255,255,.72);font-size:10.5px;font-weight:500;}
#musicPlayer.mp-bar .mp-badge{display:none!important;}
#musicPlayer.mp-bar .mp-prog,
#musicPlayer.mp-bar .mp-time{display:none!important;}
#musicPlayer.mp-bar .mp-btns{gap:1px;}
#musicPlayer.mp-bar .mp-btns button,
#musicPlayer.mp-bar #mpX{
  width:32px;height:32px;border-radius:50%;
  color:rgba(255,255,255,.84);background:transparent;
  font-size:16px;transition:background .14s ease,color .14s ease,transform .12s ease;
}
#musicPlayer.mp-bar .mp-btns button:hover,
#musicPlayer.mp-bar #mpX:hover{background:rgba(255,255,255,.12);color:#fff;}
#musicPlayer.mp-bar .mp-btns button.on{background:rgba(255,255,255,.12);color:#fff;}
#musicPlayer.mp-bar .mp-btns .mp-pp{
  width:34px!important;height:34px!important;font-size:17px!important;
  color:#fff!important;background:transparent!important;background-color:transparent!important;
  border:0!important;box-shadow:none!important;border-radius:50%!important;
}
#musicPlayer.mp-bar .mp-btns .mp-pp:hover{
  color:#fff!important;background:rgba(255,255,255,.12)!important;filter:none!important;
}
#musicPlayer.mp-bar #mpExpand{display:none!important;}
#musicPlayer.mp-bar .mp-mid{cursor:pointer;}

/* Window-mode player: Samsung Music's album-tinted surface and native now-playing hierarchy. */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen){
  --sm-acc:var(--amb2,#3B6EF5);
  --sm-acc-soft:color-mix(in srgb,var(--amb2,#3B6EF5) 16%,transparent);
  --sm-acc-line:color-mix(in srgb,var(--amb2,#3B6EF5) 38%,transparent);
  background:
    radial-gradient(115% 72% at 50% -8%,color-mix(in srgb,var(--amb2,#7655cc) 25%,transparent),transparent 76%),
    radial-gradient(85% 78% at 100% 100%,color-mix(in srgb,var(--amb1,#53617d) 23%,transparent),transparent 74%),
    linear-gradient(150deg,color-mix(in srgb,var(--sm-surf) 80%,var(--amb1,#53617d)),var(--sm-surf) 58%,color-mix(in srgb,var(--sm-surf) 86%,var(--amb2,#7655cc)));
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-body{
  position:relative;background:transparent;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-now{
  gap:0;padding:12px 6px 4px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap .mpb-cover{
  border-radius:13px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cover{
  box-shadow:0 8px 24px rgba(0,0,0,.16);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-meta{
  gap:0;padding-top:13px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-title{
  color:var(--sm-t1);font-size:19px;font-weight:650;letter-spacing:-.025em;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-artist{
  color:var(--sm-t2);font-size:14px;font-weight:500;letter-spacing:-.01em;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-chips{display:none!important;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-actions{
  width:100%;display:grid;grid-template-columns:1fr 1fr 1fr;align-items:center;
  margin:17px 0 1px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-actions button{
  justify-self:center;width:42px;height:42px;padding:0;border:0;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:transparent;color:var(--sm-t1);font-size:21px;cursor:pointer;
  transition:background .15s ease,color .15s ease,transform .12s ease;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-actions button:hover{
  background:color-mix(in srgb,var(--sm-t1) 9%,transparent);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-actions button:active{transform:scale(.92);}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-actions button.on{
  color:var(--sm-acc);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-prog{
  height:4px;margin:8px 0 0;background:color-mix(in srgb,var(--sm-t1) 24%,transparent);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBFill{
  background:var(--sm-t1);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) #mpBKnob{
  width:12px;height:12px;background:var(--sm-t1);border:0;
  box-shadow:0 1px 4px rgba(0,0,0,.24);opacity:1;transform:translate(-50%,-50%);
}
/* Samsung's elapsed/total labels sit beneath the seek track, not in a bubble. */
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time{
  top:calc(100% + 7px);bottom:auto;left:0;right:0;
  display:flex!important;justify-content:space-between;gap:0;
  padding:0;background:none;border:0;border-radius:0;
  color:var(--sm-t2);font-size:11px;font-weight:500;
  opacity:1;visibility:visible;transform:none;pointer-events:none;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time .current,
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time .end{
  color:var(--sm-t2);opacity:1;font-weight:500;font-variant-numeric:tabular-nums;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-time .sep{display:none;}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl{
  margin-top:31px;gap:clamp(8px,2.2vw,20px);justify-content:center;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button{
  width:46px;height:46px;border:0;border-radius:50%;
  color:var(--sm-t1);background:transparent;font-size:20px;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button:hover{
  color:var(--sm-t1);background:color-mix(in srgb,var(--sm-t1) 9%,transparent);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button.on{
  color:var(--sm-acc);background:transparent;
}
/* Main play/pause is a plain Samsung glyph, never a colored disc or outlined ring. */
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp{
  width:54px;height:54px;font-size:27px;color:var(--sm-t1)!important;
  background:transparent!important;background-color:transparent!important;
  border:0!important;box-shadow:none!important;text-shadow:none!important;
}
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp:hover,
html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp:focus-visible{
  color:var(--sm-t1)!important;background:transparent!important;
  background-color:transparent!important;border:0!important;box-shadow:none!important;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2{
  margin-top:12px;gap:5px;opacity:.88;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 button{
  border-color:color-mix(in srgb,var(--sm-t1) 14%,transparent);
  background:color-mix(in srgb,var(--sm-t1) 6%,transparent);color:var(--sm-t2);
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 .mpb-ric{
  width:34px;height:34px;border:0;background:transparent;
}
#mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-row2 button.on{
  color:var(--sm-acc);background:var(--sm-acc-soft);border-color:var(--sm-acc-line);
}

/* ═══════════════════════════════════════════════════════════════════════════
   16.4 · 확대 플레이어 "창 모드" 2단 — 추천·가사·목록(왼) + 재생(오)
   밑쪽 좁은 서랍에 깔려 잘 보이지 않던 추천 카드를 왼쪽 전면으로 끌어올리고,
   삼성뮤직 재생 화면(표지→제목→진행바→컨트롤)은 오른쪽 단에 둔다.
   JS(_applyBigSize)가 붙이는 .mpb-cols2 로만 켜진다 — 폰·작은 창은 기존
   세로 1단(위 16.3 블록 · 아래 17.0 모바일 블록)이 그대로 이긴다.
   전체 화면(.mpb-fs) 레이아웃은 건드리지 않는다 — 그대로 완벽하다.
   ═══════════════════════════════════════════════════════════════════════════ */
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-body{
  flex-direction:row;gap:0;padding:0;overflow:hidden;
}
/* 왼쪽 단 — 탭·검색·추천/대기열/가수별/전체 곡/가사 (본문만 스크롤) */
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-drawer{
  order:1;flex:1 1 56%;min-width:0;min-height:0;
  border-right:1px solid var(--sm-line);
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-drawer-in{
  gap:10px;height:100%;min-height:0;padding:11px 14px 10px;
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-list{
  min-height:0;
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-list.discover-mode{
  padding:0 2px 14px;
}
/* 오른쪽 단 — 삼성뮤직 세로 재생 화면(가운데 정렬) */
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-stage{
  order:2;flex:1 1 44%;min-width:0;min-height:0;overflow:hidden;
  display:flex;align-items:center;justify-content:center;padding:10px 16px;
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-now{
  width:min(340px,100%);max-height:100%;gap:8px;padding:6px 4px;
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap,
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap .mpb-cover{
  width:clamp(132px,30vh,216px);height:clamp(132px,30vh,216px);margin:0 auto;
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-meta{
  width:100%;
}
/* 왼쪽 단이 넓어진 만큼 추천 카드를 조금 키운다 */
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-row{
  grid-auto-columns:132px;
}
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-reco-art,
#mpBig.mpb-cols2:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-album-art{
  width:132px;height:132px;
}


/* ═══════════════════════════════════════════════════════════════════════════
   19.0 · 플로팅 음반 (#mpDisc) — 노트 편집 중 뜨는 LP 디스크 미니 플레이어
   ───────────────────────────────────────────────────────────────────────────
   옛 .mp-float(음반 표지만 64px 원으로 돌리던 것)을 버리고 처음부터 다시 만들었다.
   참고한 패턴
     · 삼성 뮤직 '음반' 뷰  — 재생 중에만 도는 검은 LP 판 + 가운데 표지 라벨
     · Apple Watch · YT Music 미니 위젯 — 둥근 진행 링(SVG stroke · 위에서 시계방향)
     · PiP(사진-in-사진) 플레이어 — 호버하면 컨트롤이 뜨고, 모서리 ✕ ⤢ 로 닫고 키운다
   구성(76px 상자 안 · % 로 잡아 폰에서 64px 로 줄여도 비율 그대로)
     · 진행 링  r=35 — track 흐린 회색 / fill 강조색(곡 진행률)
     · LP 판    지름 81.6% — 그루브 무늬 + 유광 하이라이트, 재생 중에만 18s/회전
                (animation-play-state 로 각도를 기억 → 멈춰도 그 자리에서 다시 돈다)
     · 표지 라벨 판 지름의 64.5% 원형(판과 함께 돈다) + 축 구멍 5px
     · 컨트롤   마우스를 올리면 판 위에 ‹ ⏯ › 스트립 · 터치 기기는 판 탭 = 재생/정지
     · ✕ ⤢     위 모서리 양쪽 FAB — 마우스는 호버 때, 터치 기기는 항상 표시
   색은 16.1 One UI 스킨 토큰(--sm-*)을 물려받아 밝은/어두운 테마가 같이 간다.
   ═══════════════════════════════════════════════════════════════════════════ */
#mpDisc{
  position:fixed;top:76px;right:14px;width:76px;height:76px;z-index:1500;
  cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;
  animation:mpdiscIn .3s cubic-bezier(.22,.9,.3,1.15);
}
#mpDisc:active{cursor:grabbing;}
@keyframes mpdiscIn{from{opacity:0;transform:scale(.55) rotate(-16deg);}to{opacity:1;transform:none;}}
/* ── 진행 링 — SVG 원하나 뿐이라 배율·테마에 무관, conic-gradient 처럼
      스킨 배경과 싸우지 않는다. -90deg 돌려 12시부터 시계방향으로 찬다. ── */
#mpDisc .mpdisc-ring{position:absolute;inset:0;width:100%;height:100%;
  transform:rotate(-90deg);pointer-events:none;}
#mpDisc .mpdisc-ring-track{fill:none;stroke:color-mix(in srgb,var(--sm-t3) 32%,transparent);
  stroke-width:3.5;}
#mpDisc .mpdisc-ring-fill{fill:none;stroke:var(--sm-acc);stroke-width:3.5;
  stroke-linecap:round;stroke-dasharray:220;stroke-dashoffset:220;
  transition:stroke-dashoffset .3s linear;}
/* ── LP 판 — 음반은 언제나 원형(14.54 사각화 !important 보다 강하게) ── */
#mpDisc .mpdisc-disc{
  position:absolute;left:9.2%;top:9.2%;width:81.6%;height:81.6%;
  border-radius:50%!important;overflow:hidden;cursor:pointer;
  background:
    conic-gradient(from 20deg,
      rgba(255,255,255,.10), transparent 22%, transparent 52%,
      rgba(255,255,255,.06) 72%, transparent 92%, rgba(255,255,255,.10)),
    repeating-radial-gradient(circle at 50% 50%,
      rgba(255,255,255,0) 0 2.6px, rgba(255,255,255,.05) 2.6px 3.2px),
    radial-gradient(circle at 50% 44%, #3c4049 0%, #262930 30%, #17181d 62%, #0e0f13 100%);
  box-shadow:0 7px 20px rgba(10,14,23,.38), inset 0 0 0 1px rgba(255,255,255,.07);
  animation:mpspin 18s linear infinite;
  animation-play-state:paused;      /* 멈춰도 각도 유지 — 판은 그 자리에서 다시 돈다 */
}
#mpDisc.playing .mpdisc-disc{animation-play-state:running;}
#mpDisc.playing .mpdisc-disc{
  box-shadow:0 8px 22px rgba(10,14,23,.42),
    0 0 16px color-mix(in srgb,var(--sm-acc) 45%,transparent),
    inset 0 0 0 1px rgba(255,255,255,.09);
}
/* 표지 라벨 — 판과 함께 돌고, 축 구멍은 한가운데 (중심이라 회전이 안 보인다) */
#mpDisc .mpdisc-art{position:absolute;left:50%;top:50%;width:64.5%;height:64.5%;
  transform:translate(-50%,-50%);border-radius:50%;object-fit:cover;
  background:var(--sm-surf2);
  box-shadow:0 0 0 1px rgba(255,255,255,.16), inset 0 0 0 1px rgba(0,0,0,.28);}
#mpDisc .mpdisc-hole{position:absolute;left:50%;top:50%;width:5px;height:5px;
  margin:-2.5px 0 0 -2.5px;border-radius:50%;background:#f4f5f8;
  box-shadow:0 0 0 1.5px rgba(10,14,23,.55), inset 0 1px 1px rgba(0,0,0,.4);}
#mpDisc .mpdisc-disc:focus-visible{outline:2px solid var(--sm-acc);outline-offset:3px;}
/* ── 호버 컨트롤 — 판을 덮는 둥근 스트립 ‹ ⏯ › (터치 기기는 판 탭이 곧 재생)
      버튼 세로로는 판 지름(62px) 안에 전부 들어온다: 17+24+17+갭2 = 60px ── */
#mpDisc .mpdisc-ctl{position:absolute;left:9.2%;top:9.2%;width:81.6%;height:81.6%;
  border-radius:50%;display:flex;align-items:center;justify-content:center;gap:1px;
  background:rgba(8,10,16,.55);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  opacity:0;pointer-events:none;transition:opacity .16s ease;cursor:default;}
#mpDisc:hover .mpdisc-ctl,#mpDisc:focus-within .mpdisc-ctl{opacity:1;pointer-events:auto;}
#mpDisc .mpdisc-btn{width:17px;height:17px;border:none;background:transparent;color:#fff;
  border-radius:50%;font-size:10.5px;line-height:1;padding:0;flex:none;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background .14s ease,transform .12s ease;}
#mpDisc .mpdisc-btn:hover{background:rgba(255,255,255,.18);}
#mpDisc .mpdisc-btn:active{transform:scale(.9);}
#mpDisc .mpdisc-pp{width:24px;height:24px;font-size:15px;}
/* ── 모서리 FAB — ✕ 숨기기 / ⤢ 큰 플레이어 (PiP 처럼) ── */
#mpDisc .mpdisc-fab{position:absolute;top:-4px;width:22px;height:22px;border-radius:50%;
  border:1px solid var(--sm-line);background:var(--sm-surf);color:var(--sm-t2);
  font-size:13px;line-height:1;padding:0;z-index:2;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:var(--sm-shadow);
  opacity:0;pointer-events:none;
  transition:opacity .16s ease,color .14s ease,transform .12s ease;}
#mpDisc .mpdisc-x{left:-4px;}
#mpDisc .mpdisc-big{right:-4px;}
#mpDisc:hover .mpdisc-fab,#mpDisc:focus-within .mpdisc-fab{opacity:1;pointer-events:auto;}
#mpDisc .mpdisc-fab:hover{color:var(--sm-acc);transform:scale(1.1);}
#mpDisc .mpdisc-fab:active{transform:scale(.95);}
/* 휠 볼륨 확인 배지 — 음반 위에서 휠을 굴리면 잠깐 퍼센트를 보여 준다 */
#mpDisc .mpdisc-vol{position:absolute;left:50%;bottom:-6px;transform:translateX(-50%) translateY(4px);
  padding:2px 8px;border-radius:99px;background:var(--sm-t1);color:var(--sm-surf);
  font-size:10.5px;font-weight:800;letter-spacing:.02em;white-space:nowrap;
  opacity:0;pointer-events:none;transition:opacity .18s ease,transform .18s ease;z-index:3;}
#mpDisc .mpdisc-vol.show{opacity:1;transform:translateX(-50%) translateY(0);}
/* 터치 기기 — 호버가 없으니: 컨트롤 스트립 대신 '판 탭 = 재생/정지'를 쓰고
   FAB 은 항상 보여 준다 (탭 = 재생/정지 · ✕ = 숨기기 · ⤢ = 큰 플레이어) */
@media (hover:none){
  #mpDisc .mpdisc-ctl{display:none;}
  #mpDisc .mpdisc-fab{opacity:1;pointer-events:auto;}
}
/* 폰 — 상자만 64px 로 줄이면 안은 % 로 따라 온다.
   편집기 머리줄은 노치에서 safe-area 만큼 내려오므로 음반 기본 자리도 함께 내린다. */
@media (max-width:640px){
  #mpDisc{width:64px;height:64px;top:calc(var(--ph-top,0px) + 64px);right:max(10px,var(--ph-right,0px));}
  #mpDisc .mpdisc-fab{width:20px;height:20px;font-size:12px;}
  #mpDisc .mpdisc-hole{width:4px;height:4px;margin:-2px 0 0 -2px;}
}
@media (prefers-reduced-motion:reduce){
  #mpDisc{animation:none;}
  #mpDisc .mpdisc-disc{animation:none;}
  #mpDisc .mpdisc-ring-fill{transition:none;}
}

/* ═══════════════════════════════════════════════════════════════════
   15.14.1 · 홈 빈 상태(검색 결과 없음 · 빈 폴더) — 두 테마 공용 바닥 규칙.
   프로 테마에서는 .grid-empty.pro-home-empty 로 21.0 스킨이 다시 꾸민다.
   #noteGrid 는 캐주얼에서 flex 바닥(줄바꿈 카드), 프로에서 grid 이므로
   두 레이아웃 모두에서 한 줄 전체를 차지하게 한다.
   ═══════════════════════════════════════════════════════════════════ */
.grid-empty{
  grid-column:1/-1;flex-basis:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:5px;min-height:200px;padding:44px 14px;text-align:center;
  color:var(--text3);font-size:13.5px;line-height:1.55;
}
.grid-empty i{font-size:30px;opacity:.5;margin-bottom:3px;}
.grid-empty strong{color:var(--text2);font-size:15px;font-weight:700;letter-spacing:-.01em;}
.grid-empty span{max-width:360px;}
/* ═══════════════════════════════════════════════════════════════════
   22.0 · NoteFlow 홈 스킨 — 기본(프로) 테마를 처음부터 다시 입힌다.

   설계 기준: 사용자가 올린 NoteFlow 화면(데스크탑 노트 앱) 한 장.
   · 사이드바 252px — 브랜드 · New Note(보라 그라디언트) · 폴더 ·
     Bookmarks · Archive · Settings · Admin Mode · Server(막대 + 퍼센트)
   · 상단줄 64px — 가운데 알약 검색 · 오른쪽 시각/알림/프로필
   · 본문 — Home 머리줄(Sort · 보기 전환) + 핀한 카드 + 노트 카드(3열)
     카드 = 색 점 + 제목(+핀) · 미리보기 두 줄 · 날짜 · 태그 알약
   · 오른쪽 칸 300px — Now Playing · Flashcard · Youpscord
   · 21.0 One UI 홈 스킨(선반·탭·FAB·썸네일 카드)을 통째로 대체한다.
     메뉴·시트·팝오버 등 다른 크롬은 --oui-* 토큰만 새 팔레트로 물려받는다.
   ═══════════════════════════════════════════════════════════════════ */

/* ── 22.0-A · 토큰 ─────────────────────────────────────────────── */
html.theme-pro{
  /* 잉크 · 배경 · 선 */
  --nf-ink:#1C1C28;          /* 제목 */
  --nf-ink2:#4B5563;         /* 본문 강조 · 아이콘 */
  --nf-sub:#8F90A0;          /* 보조 글자 */
  --nf-faint:#A0A1AD;        /* 날짜 · 힌트 */
  --nf-line:#EDEEF3;         /* 카드 테두리 */
  --nf-hair:#F0F0F4;         /* 머리카락 선 */
  --nf-card:#FFFFFF;
  --nf-page:#FCFCFD;         /* 본문 배경 — 거의 흰색 */
  --nf-side-a:#FAF9F9;       /* 사이드바 위 — 미세한 보라-회색 */
  --nf-side-b:#F3F4F6;       /* 사이드바 아래 */
  --nf-rail:#FBFAFA;         /* 오른쪽 칸 */
  --nf-field:#F5F5F8;        /* 입력 필드 */
  --nf-hover:#F1F0F7;        /* 줄 hover */
  --nf-on:#ECEAF8;           /* 줄 선택 */
  --nf-violet:#8B7AE8;
  --nf-violet-hi:#B8A4EC;
  --nf-violet-lo:#8A78DC;
  --nf-violet-ink:#6F5CC4;
  --nf-violet-soft:#F1EEFC;
  --nf-teal-hi:#8FC7D2;
  --nf-teal-lo:#6FB0C1;
  --nf-red:#F4614B;
  /* 모서리 · 그림자 */
  --nf-r-card:16px;
  --nf-r-w:16px;
  --nf-r-row:9px;
  --nf-sh-card:0 1px 2px rgba(16,24,40,.04),0 10px 24px -16px rgba(16,24,40,.14);
  --nf-sh-card-h:0 2px 4px rgba(16,24,40,.05),0 16px 32px -18px rgba(16,24,40,.20);
  /* 다른 프로 크롬(메뉴·시트·팝오버)은 같은 팔레트를 물려받는다 */
  --oui-acc:#8B7AE8; --oui-acc-hi:#A893E8; --oui-acc-ink:#FFFFFF;
  --oui-acc-soft:rgba(139,122,232,.12); --oui-acc-line:rgba(139,122,232,.34);
  --oui-page:#FCFCFD; --oui-surf:#FFFFFF; --oui-surf2:#F5F5F8; --oui-surf3:#ECECF2;
  --oui-t1:#1C1C28; --oui-t2:#4B5563; --oui-t3:#8F90A0;
  --oui-line:#EDEEF3;
  --oui-r-sheet:20px; --oui-r-pop:16px; --oui-r-card:16px; --oui-r-item:10px;
  --oui-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 24px -16px rgba(16,24,40,.14);
  --oui-shadow-lg:0 2px 4px rgba(16,24,40,.05),0 18px 40px -20px rgba(16,24,40,.22);
  --oui-grad-acc:linear-gradient(135deg,#A893E8 0%,#8B7AE8 55%,#6F5CC4 100%);
}

/* ── 22.0-B · 화면 배경 ─────────────────────────────────────────── */
html.theme-pro body{background:var(--nf-page);}
html.theme-pro #sdyAmbient{background:var(--nf-page);}
/* 버츄얼라이저 캔버스도 사이드바(258px) 오른쪽부터 */
html.theme-pro #proHomeEq{left:258px!important;width:calc(100% - 258px)!important;}

/* ── 22.0-C · 셸 — 고정 사이드바 + 본문 + 오른쪽 칸 ─────────────── */
html.theme-pro #proShell{display:flex;align-items:flex-start;min-height:100dvh;}
html.theme-pro #proSide{
  position:fixed!important;top:0;left:0;right:auto;bottom:0;inset:auto!important;
  width:258px;height:100dvh;z-index:90;
  display:flex;flex-direction:column;min-height:0;
  padding:20px 16px 18px;
  background:linear-gradient(180deg,var(--nf-side-a) 0%,#F5F4F8 50%,var(--nf-side-b) 100%);
  overflow:hidden;
  font-family:'Jua','Pretendard Variable',Pretendard,-apple-system,'Segoe UI',sans-serif;
}
html.theme-pro #mainView{
  flex:1 1 auto;min-width:0;
  margin-left:258px!important;left:auto!important;right:auto!important;
  margin-right:0!important;
}
/* 오른쪽 칸은 본문 옆에 붙어 상단줄 아래까지 내려온다(고정). */
html.theme-pro .nf-rail{
  position:fixed;top:64px;right:0;bottom:0;width:260px;z-index:40;
  padding:20px 16px 28px;overflow-y:auto;
  display:flex;flex-direction:column;gap:18px;
  background:var(--nf-rail);
  border-left:1px solid var(--nf-hair);
  font-family:'Jua','Pretendard Variable',Pretendard,-apple-system,'Segoe UI',sans-serif;
}
/* 25.1 · 오른쪽 칸은 **평소 접혀 있다** — 오른쪽 가장자리 손잡이(#nfRailTab)를
   눌러야 Now Playing · Flashcard · Youpscord 가 나온다. 접힌 동안에는 화면 밖으로
   밀리고(공간 0 — #mainView 오른쪽 여백도 0), 노트 격자가 그만큼 넓어진다.
   visibility 는 밀리는 동안 미루었다가(.26s) 접힌 뒤에 숨긴다 — 화면 밖 위젯에
   탭 키가 닿지 않게. */
html.theme-pro .nf-rail{
  visibility:hidden;transform:translateX(calc(100% + 24px));
  transition:transform .26s cubic-bezier(.4,.1,.2,1),visibility 0s linear .26s;
}
html.theme-pro body.nf-rail-open .nf-rail{
  visibility:visible;transform:none;
  transition:transform .26s cubic-bezier(.4,.1,.2,1),visibility 0s;
}
/* 손잡이 — 접힌 동안 화면 오른쪽 가장자리에 붙어 있고, 펼치면 레일 왼쪽 모서리로
   따라간다(같은 손잡이가 '접기'가 된다). 세로쓰기 '위젯'. */
html.theme-pro .nf-rail-tab{
  position:fixed;top:50%;right:0;transform:translateY(-50%);z-index:41;
  display:inline-flex;flex-direction:column;align-items:center;gap:7px;
  padding:13px 7px;border:1px solid var(--nf-line);border-right:0;
  border-radius:12px 0 0 12px;background:var(--nf-card);color:#6B7280;
  font-family:'Jua','Pretendard Variable',Pretendard,-apple-system,'Segoe UI',sans-serif;
  font-size:11px;font-weight:700;letter-spacing:-.01em;line-height:1;
  box-shadow:-8px 0 20px -14px rgba(24,26,40,.34);cursor:pointer;
  transition:right .26s cubic-bezier(.4,.1,.2,1),color .15s,background .15s;
}
html.theme-pro .nf-rail-tab > i{font-size:16px;}
html.theme-pro .nf-rail-tab > span{writing-mode:vertical-rl;text-orientation:upright;}
html.theme-pro .nf-rail-tab:hover{color:var(--nf-violet-ink);background:var(--nf-hover);}
html.theme-pro .nf-rail-tab:focus-visible{outline:2px solid var(--nf-violet);outline-offset:-2px;}
html.theme-pro body.nf-rail-open .nf-rail-tab{right:260px;}

/* 클래식 테마는 이 구조를 쓰지 않는다 */
html.theme-classic .nf-topbar,
html.theme-classic .nf-rail,
html.theme-classic .nf-rail-tab{display:none!important;}
html.theme-classic .pro-state{display:none!important;}

/* ── 22.0-D · 사이드바 — 브랜드 · New Note · 폴더 · 줄 · Server ──── */
html.theme-pro .pro-brand{padding:2px 8px 0;margin:0 0 42px;display:block;text-align:left;}
html.theme-pro .pro-brand .app-brand{
  margin-left:0!important;gap:10px;justify-content:flex-start;flex-direction:row;
}
html.theme-pro .pro-brand .logo-dot{
  width:30px;height:30px;border-radius:9px;flex-shrink:0;
  box-shadow:0 4px 10px -4px rgba(28,28,40,.28);
}
html.theme-pro .pro-brand .app-brand h1{margin:0;line-height:0;display:flex;align-items:center;}
html.theme-pro .pro-brand .app-brand h1 .brand-wordmark{height:22px;transform:none;width:auto;}
/* 새 로고는 접힌 보라 네모 + SDYnotes 글자. 흰 칸을 깔면 사이드바(#FAF9F9)와
   어긋나 보이므로 배지 배경은 투명, 그림자는 마크 자체 음영에 맡긴다. */
html.theme-pro .pro-brand .logo-dot{
  background:transparent;box-shadow:none;overflow:visible;
}
html.theme-pro .app-brand .logo-dot,
html.theme-pro .sp-logo,
html.theme-pro .sa-logo{background:transparent;}
html.theme-pro .pro-brand .logo-dot .brand-mark{border-radius:8px;}
/* 새 노트 — 보라 그라디언트 알약 */
html.theme-pro .nf-new{
  position:relative;padding:0 40px;
  display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;height:42px;border:0;border-radius:12px;
  background:linear-gradient(180deg,var(--nf-violet-hi) 0%,var(--nf-violet-lo) 100%);
  color:#fff;font-family:inherit;font-size:13.5px;font-weight:600;letter-spacing:-.01em;
  cursor:pointer;box-shadow:0 8px 18px -8px rgba(139,122,232,.55);
  transition:filter .15s ease,box-shadow .15s ease,transform .12s ease;
}
/* 아이콘을 흐름에서 빼 문구 자체가 버튼의 정중앙에 놓이게 한다. */
html.theme-pro .nf-new i{
  position:absolute;left:16px;top:50%;transform:translateY(-50%);
  font-size:17px;line-height:1;
}
html.theme-pro .nf-new:hover{filter:brightness(1.04);box-shadow:0 10px 22px -8px rgba(139,122,232,.65);}
html.theme-pro .nf-new:active{transform:scale(.985);}
/* 폴더 줄 — 사이드바 나머지 항목은 고정하고, 긴 폴더 목록만 안에서 스크롤 */
html.theme-pro #proSide > .pro-brand,
html.theme-pro #proSide > .nf-new,
html.theme-pro #proSide > .nf-bookmarks,
html.theme-pro #proSide > .nf-row,
html.theme-pro #proSide > .nf-server{flex-shrink:0;}
html.theme-pro .nf-folders{
  display:flex;flex:1 1 auto;flex-direction:column;gap:2px;min-height:0;
  margin:18px 0 0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;
}
html.theme-pro .nf-folders .pro-fold-item,
html.theme-pro .nf-row{
  display:flex;align-items:center;gap:10px;width:100%;min-height:38px;
  padding:0 10px;border:0;border-radius:var(--nf-r-row);background:transparent;
  color:#3F3F46;font-family:inherit;font-size:13.5px;font-weight:500;
  text-align:left;cursor:pointer;letter-spacing:-.01em;
  transition:background .13s ease,color .13s ease;
}
html.theme-pro .nf-folders .pro-fold-item > i:first-child,
html.theme-pro .nf-row > i:first-child{font-size:16px;color:#8A8F9C;flex-shrink:0;}
html.theme-pro .nf-folders .pro-fold-item .nf-chev{font-size:13px;color:#B4B7C2;flex-shrink:0;margin-right:-4px;}
html.theme-pro .nf-folders .pro-fold-item .pf-name{
  flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro .nf-folders .pro-fold-item .pf-count{display:none!important;}
html.theme-pro .nf-folders .pro-fold-item:hover,
html.theme-pro .nf-row:hover{background:var(--nf-hover);}
html.theme-pro .nf-folders .pro-fold-item.on{background:var(--nf-on);color:var(--nf-violet-ink);}
html.theme-pro .nf-folders .pro-fold-item.on > i:first-child{color:var(--nf-violet-ink);}
html.theme-pro .nf-folders .pro-fold-home.on i{color:var(--nf-violet-ink);}
/* 하위 폴더가 없는 마지막 줄에는 화살표 대신 비대화형 간격만 둔다. */
html.theme-pro .nf-folders .pro-fold-item .nf-chev-gap{width:13px;flex:none;margin-right:-4px;}
/* 24.0 · 사이드바도 트리 — 하위 폴더는 화살표를 누르면 아래로 펼쳐진다.
   단계(--lvl)만큼 들여쓰고, 펼친 줄(.open)은 화살표가 90° 돈다. */
html.theme-pro .nf-folders .pro-fold-item{padding-left:calc(10px + var(--lvl,0) * 14px);}
html.theme-pro .nf-folders .pro-fold-item .nf-chev{transition:transform .15s ease;}
html.theme-pro .nf-folders .pro-fold-item.open .nf-chev{transform:rotate(90deg);}
html.theme-pro .nf-folders .pro-fold-item .nf-chev:hover{color:var(--nf-ink);}
/* Bookmarks — 접히는 줄 */
html.theme-pro .nf-bookmarks{margin:16px 0 0;padding-top:14px;border-top:1px solid var(--nf-hair);}
html.theme-pro .nf-bookmarks > summary{
  display:flex;align-items:center;gap:10px;min-height:38px;padding:0 10px;
  border-radius:var(--nf-r-row);cursor:pointer;list-style:none;
  color:#3F3F46;font-size:13.5px;font-weight:500;letter-spacing:-.01em;
  transition:background .13s ease;
}
html.theme-pro .nf-bookmarks > summary::-webkit-details-marker{display:none;}
html.theme-pro .nf-bookmarks > summary > i:first-child{font-size:16px;color:#8A8F9C;}
html.theme-pro .nf-bookmarks > summary span{flex:1;}
html.theme-pro .nf-bookmarks > summary .nf-chev{font-size:14px;color:#B4B7C2;transition:transform .15s ease;}
html.theme-pro .nf-bookmarks[open] > summary .nf-chev{transform:rotate(90deg);}
html.theme-pro .nf-bookmarks > summary:hover{background:var(--nf-hover);}
html.theme-pro .nf-bm-panel{
  padding:8px 4px 4px;display:flex;flex-direction:column;gap:6px;
  max-height:min(24vh,240px);overflow-y:auto;overscroll-behavior:contain;
}
html.theme-pro .nf-bm-panel .link-bar{margin:0;justify-content:flex-start;}
/* 아래쪽 — Settings · Admin Mode · Server */
html.theme-pro .nf-grow{flex:1 1 auto;min-height:16px;border-top:1px solid var(--nf-hair);margin-top:14px;padding-top:14px;}
html.theme-pro #nfAdminRow{margin-top:2px;}
html.theme-pro body.admin-on #nfAdminRow{background:var(--nf-on);color:var(--nf-violet-ink);}
html.theme-pro body.admin-on #nfAdminRow > i:first-child{color:var(--nf-violet-ink);}
html.theme-pro .nf-vault-slot{margin-left:auto;display:none;align-items:center;}
html.theme-pro body.admin-on .nf-vault-slot{display:inline-flex;}
html.theme-pro .nf-vault-slot .vault-btn{
  width:28px;height:28px;padding:0;border:0;border-radius:8px;background:transparent;
  color:#8A8F9C;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
}
html.theme-pro .nf-vault-slot .vault-btn:hover{background:#fff;color:var(--nf-violet-ink);}
/* 14.64 상태 줄(계기판)은 Server 막대로 대체 — DOM만 남긴다 */
html.theme-pro .pro-state{display:none!important;}
/* Server — 글자 + 퍼센트 + 막대 (눌러서 상태 팝오버) */
html.theme-pro .nf-server{
  display:block;width:100%;margin-top:16px;padding:0 4px;border:0;background:transparent;
  cursor:pointer;text-align:left;font-family:inherit;
}
html.theme-pro .nf-server-top{
  display:flex;justify-content:space-between;align-items:baseline;
  font-size:12.5px;font-weight:500;color:#9A9BA4;letter-spacing:-.01em;
}
html.theme-pro .nf-server-top b{font-weight:600;}
html.theme-pro .nf-server-track{
  display:block;height:8px;margin-top:8px;border-radius:99px;
  background:#E9EDF2;overflow:hidden;
}
html.theme-pro .nf-server-fill{
  display:block;height:100%;width:0;border-radius:99px;
  background:linear-gradient(90deg,#3FB6C4 0%,#7FD8A8 100%);
  transition:width .5s ease;
}
html.theme-pro #proSide button:focus-visible,
html.theme-pro #proSide [role="button"]:focus-visible{
  outline:2px solid var(--nf-violet);outline-offset:2px;
}

/* ── 22.0-E · 상단줄 — 검색 · 시각 · 알림 · 프로필 ───────────────── */
html.theme-pro .nf-topbar{
  position:sticky;top:0;z-index:60;
  display:flex;align-items:center;gap:14px;
  height:64px;padding:0 22px 0 26px;
  background:rgba(252,253,253,.90);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  border-bottom:1px solid var(--nf-hair);
}
html.theme-pro .nf-menu-btn{
  display:none;width:38px;height:38px;flex-shrink:0;border:0;border-radius:10px;
  background:transparent;color:var(--nf-ink2);cursor:pointer;
  align-items:center;justify-content:center;
}
html.theme-pro .nf-menu-btn i{font-size:19px;}
html.theme-pro .nf-search-slot{flex:1 1 auto;display:flex;justify-content:center;min-width:0;}
html.theme-pro .nf-search-slot .search-wrap{position:relative;flex:1;max-width:520px;min-width:0;}
html.theme-pro .nf-search-slot .search-wrap > i{
  position:absolute;left:15px;top:50%;transform:translateY(-50%);
  color:#9CA3AF;font-size:16px;pointer-events:none;
}
html.theme-pro .nf-search-slot #searchInput{
  display:block;width:100%!important;height:40px!important;
  padding:0 16px 0 40px!important;
  border:1px solid #E7E7EE!important;border-radius:999px!important;
  background:#FFFFFF!important;color:#374151;
  font-family:inherit;font-size:13px;outline:none;
  box-shadow:0 1px 2px rgba(16,24,40,.04)!important;
  transition:border-color .15s ease,box-shadow .15s ease;
}
html.theme-pro .nf-search-slot #searchInput::placeholder{color:#9CA3AF;}
html.theme-pro .nf-search-slot #searchInput:focus{
  border-color:#C9BEF2!important;box-shadow:0 0 0 3px rgba(139,122,232,.14)!important;
}
html.theme-pro .nf-topright{margin-left:auto;display:flex;align-items:center;gap:4px;flex-shrink:0;}
html.theme-pro .nf-offline-slot{display:inline-flex;}
html.theme-pro .nf-offline-slot .offline-badge{
  position:static;margin-right:6px;border-radius:99px;
  background:#FEF3C7;color:#92400E;font-size:11.5px;font-weight:700;padding:5px 10px;
}
html.theme-pro .nf-clock{
  border:0;background:transparent;color:var(--nf-ink2);
  font-family:inherit;font-size:13px;font-weight:500;font-variant-numeric:tabular-nums;
  padding:7px 9px;border-radius:9px;cursor:pointer;letter-spacing:-.01em;
}
html.theme-pro .nf-clock:hover{background:var(--nf-hover);}
html.theme-pro .nf-btn-slot{display:inline-flex;position:relative;}
html.theme-pro .nf-btn-slot .tool-btn{
  position:relative;width:38px;height:38px;border:0;border-radius:10px;background:transparent;
  color:var(--nf-ink2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
}
html.theme-pro .nf-btn-slot .tool-btn i{font-size:19px;}
html.theme-pro .nf-btn-slot .tool-btn:hover{background:var(--nf-hover);}
html.theme-pro .nf-btn-slot .notif-badge{
  position:absolute;top:6px;right:6px;width:8px;height:8px;min-width:0;
  padding:0;border:0;border-radius:50%;background:var(--notif-dot);
  box-shadow:0 0 0 1.5px var(--nf-card),0 0 6px rgba(255,238,0,.45);
  font-size:0;line-height:0;color:transparent;overflow:hidden;
}
html.theme-pro .nf-avatar-slot .acc-btn{
  width:34px;height:34px;border:1px solid var(--nf-line);border-radius:50%;padding:0;margin-left:6px;
  background:var(--nf-field);color:var(--nf-ink2);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:none;
}
html.theme-pro .nf-avatar-slot .acc-btn:hover{background:var(--nf-hover);color:var(--nf-ink);}
html.theme-pro .nf-avatar-slot .acc-btn i{font-size:17px;}
html.theme-pro .nf-avatar-slot .acc-dot{
  /* 23.0 · 초록 점이 사람 아이콘 위에 겹치던 문제 — 테두리(링) 대신 아바타 원의
     오른쪽 아래 모서리에 상태 배지로 붙인다. 아이콘은 그대로 가운데. */
  position:absolute;top:auto;left:auto;right:-1px;bottom:-1px;
  width:10px;height:10px;min-width:0;padding:0;border:0;border-radius:50%;
  background:#22C55E;font-size:0;line-height:0;
  box-shadow:0 0 0 2px var(--nf-card);
}

/* ── 22.0-F · 본문 여백 · 머리줄(Home · Sort · 보기 전환) ───── */
/* 25.1 · 오른쪽 칸을 펼쳤을 때만 여백을 준다 — 접힌 기본 상태에서는 노트가
   화면 끝까지 쓴다(기본 margin-right:0 은 위 #mainView 규칙에 있다). */
html.theme-pro body.nf-rail-open #mainView{margin-right:260px!important;}
html.theme-pro #mainView > main{padding:24px 28px 48px!important;overflow:visible;}
html.theme-pro .nf-page-head{
  display:flex;align-items:center;justify-content:space-between;gap:14px;
  margin:2px 0 18px;
}
/* 폴더 내부 파일 목록을 없애고 노트 카드 영역이 본문 폭을 모두 쓴다. */
html.theme-pro .nf-folder-body{margin:0;}
html.theme-pro .nf-folder-main{min-width:0;}
/* 폴더 머리줄 ⋯ — 폴더 기능(이름·색·잠금·삭제…)을 한 단추로 모은다 */
/* 24.0 · 설정 스위치 — 다크 모드 한 줄. 34×19 알약 + 흰 손잡이. */
.sdy-switch{
  position:relative;flex:none;width:40px;height:22px;border-radius:99px;border:1px solid var(--border);
  background:var(--bg2);cursor:pointer;padding:0;transition:background .16s ease,border-color .16s ease;
}
.sdy-switch i{
  position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.28);transition:left .16s ease;
}
.sdy-switch.on{background:var(--accent);border-color:var(--accent);}
.sdy-switch.on i{left:20px;}
html.theme-pro .sdy-switch{
  width:40px;height:22px;border-color:var(--nf-line);background:var(--nf-hover);
}
html.theme-pro .sdy-switch i{top:2px;left:2px;background:#fff;}
html.theme-pro .sdy-switch.on{background:var(--nf-violet);border-color:var(--nf-violet);}
html.theme-pro .sdy-switch.on i{left:20px;background:#fff;}
html.theme-pro .nf-page-tools .nf-folder-menu{
  display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;
  border:1px solid #E7E7EE;border-radius:10px;background:#fff;color:#9CA3AF;
  cursor:pointer;box-shadow:0 1px 2px rgba(16,24,40,.04);
  transition:border-color .15s ease,color .15s ease;
}
html.theme-pro .nf-page-tools .nf-folder-menu i{font-size:16px;}
html.theme-pro .nf-page-tools .nf-folder-menu:hover{border-color:#D9D6E8;color:var(--nf-ink);}
/* 23.0 · 프로에서 이동 경로 줄은 쓰지 않는다 — 머리줄 제목과 왼쪽 목록이 그 몫을 한다.
   (버튼 다섯 개가 달린 경로 줄이 '조잡하다'는 지적) */
html.theme-pro #breadcrumb{display:none!important;}
html.theme-pro .nf-page-title{
  display:flex;align-items:center;gap:9px;margin:0;
  font-size:18px;font-weight:700;color:var(--nf-ink);letter-spacing:-.02em;
}
html.theme-pro .nf-page-title i{font-size:17px;color:var(--nf-ink);}
html.theme-pro .nf-pinned-lab{
  display:flex;align-items:center;gap:8px;margin:0 0 12px;
}
html.theme-pro .nf-pinned-lab[hidden]{display:none!important;}
html.theme-pro .nf-pinned-title{
  display:flex;align-items:center;gap:8px;margin:0;
  font-size:14px;font-weight:700;color:var(--nf-ink);letter-spacing:-.02em;
}
html.theme-pro .nf-pinned-title i{font-size:14px;color:var(--nf-ink);}
html.theme-pro .nf-page-tools{display:flex;align-items:center;gap:10px;}
html.theme-pro .nf-page-tools .home-sort-btn{
  display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 12px;
  border:1px solid #E7E7EE;border-radius:10px;background:#fff;color:var(--nf-ink2);
  font-family:inherit;font-size:12.5px;font-weight:600;letter-spacing:-.01em;cursor:pointer;
  box-shadow:0 1px 2px rgba(16,24,40,.04);
  transition:border-color .15s ease,color .15s ease;
}
html.theme-pro .nf-page-tools .home-sort-btn i{font-size:14px;color:#9CA3AF;}
html.theme-pro .nf-page-tools .home-sort-btn:hover{border-color:#D9D6E8;color:var(--nf-ink);}
html.theme-pro .nf-page-tools .home-view-toggle{
  display:inline-flex;gap:2px;padding:3px;border:1px solid #E7E7EE;border-radius:10px;
  background:#fff;box-shadow:0 1px 2px rgba(16,24,40,.04);
}
html.theme-pro .nf-page-tools .hvt-btn{
  width:30px;height:30px;border:0;border-radius:7px;background:transparent;color:#9CA3AF;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background .13s ease,color .13s ease;
}
html.theme-pro .nf-page-tools .hvt-btn i{font-size:15px;}
html.theme-pro .nf-page-tools .hvt-btn:hover{color:var(--nf-ink2);}
html.theme-pro .nf-page-tools .hvt-btn.on{background:#F3F4F8;color:var(--nf-ink2);}
/* 정렬 팝오버
   23.0 · 위치 버그 — 이 메뉴는 JS 가 style.left/top 으로 띄우는데, 규칙에 position 이
   없어 그대로 static 이었다. static 이면 left/top 이 무시돼 문서 흐름 맨 끝(화면 밖)
   에 붙어, '정렬'을 눌러도 아무것도 안 뜨는 것처럼 보였다.
   → 둥근 메뉴는 늘 fixed. (클래식이 돌아와도 같은 규칙을 쓰도록 접두사 없이 둔다) */
.home-sort-pop{
  position:fixed;z-index:1300;
}
html.theme-pro .home-sort-pop{
  background:#fff;border:1px solid var(--nf-line);border-radius:14px;
  box-shadow:var(--nf-sh-card-h);padding:6px;min-width:180px;
  animation:hspIn .14s cubic-bezier(.2,.85,.3,1);
}
@keyframes hspIn{from{opacity:0;transform:translateY(-5px) scale(.98);}to{opacity:1;transform:none;}}
@media (prefers-reduced-motion:reduce){
  html.theme-pro .home-sort-pop{animation:none;}
}
html.theme-pro .home-sort-pop .hsort-item{
  display:flex;align-items:center;gap:9px;width:100%;min-height:38px;padding:0 11px;
  border:0;border-radius:9px;background:transparent;cursor:pointer;
  color:var(--nf-ink2);font-family:inherit;font-size:13px;font-weight:500;text-align:left;
}
html.theme-pro .home-sort-pop .hsort-item i{font-size:15px;color:#9CA3AF;}
html.theme-pro .home-sort-pop .hsort-item span{flex:1;}
html.theme-pro .home-sort-pop .hsort-item:hover{background:var(--nf-hover);}
html.theme-pro .home-sort-pop .hsort-item.on{color:var(--nf-violet-ink);font-weight:600;}
html.theme-pro .home-sort-pop .hsort-item.on > i:first-child{color:var(--nf-violet-ink);}
html.theme-pro .home-sort-pop .hsort-check{color:var(--nf-violet-ink);}

/* ── 22.0-G · 노트 카드 — 색 점 + 제목 + 미리보기 + 날짜 + 태그 ──── */
html.theme-pro #noteGrid.nf-grid,
html.theme-pro #nfPinned{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;
  padding:0!important;margin:0;align-items:stretch;overflow:visible;
}
html.theme-pro #nfPinned:not([hidden]){margin-bottom:18px;}
html.theme-pro #noteGrid.nf-grid{margin-top:0;}
html.theme-pro #noteGrid.nf-grid.view-list,
html.theme-pro #nfPinned.view-list{grid-template-columns:1fr;}
html.theme-pro #noteGrid.nf-grid .note-card,
html.theme-pro #nfPinned .note-card{
  position:relative;display:flex;flex-direction:column;
  width:auto!important;flex:0 1 auto!important;flex-basis:auto!important;
  height:auto!important;min-height:0;margin:0;
  /* 25.1 · 카드 자체가 첫 쪽 종이(A4 비율) — 안쪽 여백 없이 종이가 전체를 채운다.
     글자는 종이 위 판(.nf-card-overlay)에 얹힌다. 종이 비율을 지키려고 이 카드만
     줄 높이에 늘어나지 않는다(폴더 카드는 예전처럼 줄 높이를 채운다). */
  aspect-ratio:4/3;align-self:start;padding:0;
  border:1px solid var(--nf-line);border-radius:var(--nf-r-card);
  background:var(--nf-card);box-shadow:var(--nf-sh-card);
  cursor:pointer;overflow:hidden;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
}
html.theme-pro #noteGrid.nf-grid .note-card::after,
html.theme-pro #nfPinned .note-card::after{display:none!important;}
html.theme-pro #noteGrid.nf-grid .note-card:hover,
html.theme-pro #nfPinned .note-card:hover{
  transform:translateY(-2px);box-shadow:var(--nf-sh-card-h);border-color:#E4E0F2;
}
html.theme-pro #noteGrid.nf-grid .note-card:active,
html.theme-pro #nfPinned .note-card:active{transform:translateY(-1px);}
html.theme-pro #noteGrid.nf-grid .note-card.selected,
html.theme-pro #nfPinned .note-card.selected{border-color:var(--accent,#4F6EF7);box-shadow:0 0 0 3px var(--accent,#4F6EF7),0 0 0 6px rgba(79,110,247,.26),var(--nf-sh-card);}
/* 윗 줄 — 점/이모지 · 제목 · 핀 · 인증 · 메뉴 (여백은 판이 준다) */
html.theme-pro .nf-card .nf-card-top{display:flex;align-items:center;gap:9px;min-width:0;margin-bottom:0;}
/* 24.0 · 색 점은 카드 왼쪽 위에 늘 보인다(목업과 같은 자리·같은 크기).
   호버해야 나타나던 예전 규칙(.note-card:hover .emoji-badge{opacity:1})을 덮는다. */
html.theme-pro .nf-card .emoji-badge{
  position:static;top:auto;left:auto;opacity:1;
  width:10px;height:10px;flex-shrink:0;border-radius:50%;
  background:var(--dot,#8B7AE8);
  display:inline-flex;align-items:center;justify-content:center;
  font-size:14px;line-height:1;cursor:default;pointer-events:none;
}
html.theme-pro .nf-card .emoji-badge .emoji-ph{display:none;}
html.theme-pro .nf-card .emoji-badge.has-emoji{width:10px;height:10px;background:var(--dot,#8B7AE8);font-size:0;}
html.theme-pro .nf-card .ncn-title{
  flex:1;min-width:0;font-size:14px;font-weight:600;color:var(--nf-ink);
  letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro .nf-card .nf-pin,
html.theme-pro .nf-card .nf-lock{flex-shrink:0;font-size:13px;color:#B6B7C0;}
html.theme-pro .nf-card .nf-lock{color:#9CA3AF;}
html.theme-pro .nf-card .note-menu-btn{
  display:none;flex-shrink:0;padding:2px;border-radius:6px;
  font-size:17px;color:#B6B7C0;cursor:pointer;
}
html.theme-pro .nf-card:hover .note-menu-btn{display:inline-flex;}
html.theme-pro .nf-card .note-menu-btn:hover{color:var(--nf-violet-ink);background:var(--nf-hover);}
/* 25.1 · 첫 쪽 미리보기 — 카드 전체를 채운다.
   .note-preview / .note-preview-frame 은 공용 축소판 기계(rescaleOne · pvPaint ·
   끌기 클론)가 찾는 이름이라 그대로 쓴다. 여기서는 칸을 카드 전체로 펴고 종이색만
   준다(축소판 자체는 renderPageStatic 이 그린 .ppv — 라이트 토큰 그대로).
   15.41.1 · aspect-ratio:auto!important — 위쪽 카드 프리셋 규칙
   (`#noteGrid .note-preview{height:auto!important;aspect-ratio:4/5}`)이 이 칸에도
   걸려, 카드(4/3)보다 세로로 긴 4/5 상자가 되어 카드 밖으로 180px 넘쳤다.
   그 탓에 배율의 기준 사각형이 카드와 어긋나 첫 쪽이 카드 안에서 아래로 밀렸다
   (가로 페이지가 카드 위쪽에 붙어 보이던 원인). 상자는 정확히 카드와 같은 사각형. */
html.theme-pro .nf-card > .note-preview{
  position:absolute;inset:0;height:auto;aspect-ratio:auto!important;
  border-radius:inherit;background:var(--nf-page);pointer-events:none;
}
html.theme-pro .nf-card > .note-preview > .note-preview-frame{
  box-shadow:none;border-radius:0;
}
html.theme-pro .nf-card > .note-preview > .note-preview-frame .ppv{
  outline-color:var(--nf-hair);
}
/* 위아래 부드러운 판 — 가운데는 비어 있어 첫 쪽이 그대로 보인다.
   제목·날짜·태그는 이 판 위에서만 앉는다(블러 + 반투명 흰 바탕). */
html.theme-pro .nf-card .nf-card-overlay{
  position:absolute;inset:0;z-index:3;display:flex;flex-direction:column;
  border-radius:inherit;pointer-events:none;
}
html.theme-pro .nf-card .nf-card-overlay > .nf-card-top,
html.theme-pro .nf-card .nf-card-overlay > .nf-card-foot{
  padding:13px 15px;
  -webkit-backdrop-filter:blur(7px) saturate(1.04);
  backdrop-filter:blur(7px) saturate(1.04);
}
html.theme-pro .nf-card .nf-card-overlay > .nf-card-top{
  margin-bottom:auto;
  background:linear-gradient(180deg,rgba(255,255,255,.90) 0%,rgba(255,255,255,.68) 100%);
  border-radius:inherit;
}
html.theme-pro .nf-card .nf-card-overlay > .nf-card-foot{
  background:linear-gradient(0deg,rgba(255,255,255,.92) 0%,rgba(255,255,255,.66) 100%);
  border-radius:inherit;
}
/* 판은 클릭·끌기를 막지 않는다 — ⋯ 메뉴만 직접 받는다 */
html.theme-pro .nf-card .nf-card-overlay .note-menu-btn{pointer-events:auto;}
/* 아랫 줄 — 만든날짜 · 태그 알약 (판 아래 모서리) */
html.theme-pro .nf-card .nf-card-foot{
  margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;
}
html.theme-pro .nf-card .ncm-date{font-size:11.5px;color:var(--nf-faint);white-space:nowrap;}
html.theme-pro .nf-card .nf-tag{
  font-size:11px;font-weight:600;padding:3px 9px;border-radius:99px;
  color:var(--tag-ink,var(--nf-violet-ink));
  background:var(--tag-bg,var(--nf-violet-soft));
  max-width:62%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro .nf-card .nf-card-date{font-size:12px;color:var(--nf-faint);margin:2px 0 0;}
/* 고정 카드 — 미리보기 없이 제목·날짜·태그가 위아래로 퍼진다(25.1 이전 모양 그대로) */
html.theme-pro #nfPinned .note-card{
  aspect-ratio:auto;min-height:118px;padding:16px 18px 14px;overflow:visible;
}
html.theme-pro #nfPinned .note-card .nf-card-pv{display:none;}
html.theme-pro #nfPinned .note-card .nf-card-overlay{
  position:static;inset:auto;flex:1;pointer-events:auto;
}
html.theme-pro #nfPinned .note-card .nf-card-overlay > .nf-card-top,
html.theme-pro #nfPinned .note-card .nf-card-overlay > .nf-card-foot{
  padding:0;background:none;-webkit-backdrop-filter:none;backdrop-filter:none;
}
html.theme-pro #nfPinned .note-card .nf-card-top{margin-bottom:10px;}
html.theme-pro #nfPinned .nf-card-foot{margin-top:auto;}
/* 목록 보기 — 가로 한 줄 */
html.theme-pro #noteGrid.nf-grid.view-list .note-card{
  flex-direction:row;align-items:center;gap:14px;aspect-ratio:auto;min-height:0;
  padding:12px 16px;overflow:visible;
}
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-pv{display:none;}
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-overlay{
  position:static;inset:auto;flex-direction:row;align-items:center;gap:14px;pointer-events:auto;
}
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-overlay > .nf-card-top,
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-overlay > .nf-card-foot{
  padding:0;background:none;-webkit-backdrop-filter:none;backdrop-filter:none;
}
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-top{margin-bottom:0;flex:1;min-width:0;}
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-date{display:none;}
html.theme-pro #noteGrid.nf-grid.view-list .nf-card-foot{margin-top:0;flex-shrink:0;}
/* 잠금 · 선택 */
html.theme-pro .nf-card.locked .nf-card-pv{filter:blur(5px);opacity:.55;}
html.theme-pro .nf-card .lock-overlay{display:none!important;}
html.theme-pro .nf-card .select-check{
  display:none;position:absolute;top:10px;left:10px;width:22px;height:22px;z-index:5;
  border-radius:50%;background:#fff;border:1.5px solid #D8D8E0;color:#fff;
  align-items:center;justify-content:center;font-size:13px;
}
html.theme-pro .nf-card .select-check i{font-size:13px;}
html.theme-pro .nf-card.selected .select-check{display:flex;background:var(--nf-violet);border-color:var(--nf-violet);}
html.theme-pro .select-mode .nf-card .select-check{display:flex;}
html.theme-pro .select-mode .nf-card{cursor:default;}
html.theme-pro .select-mode .nf-card:hover{transform:none;}
html.theme-pro .nf-card.dragging{opacity:.45;transform:scale(.97);}
/* 빈 상태 */
html.theme-pro .nf-empty{
  grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:6px;min-height:220px;padding:40px 14px;text-align:center;
  color:var(--nf-sub);font-size:13.5px;line-height:1.6;
}
html.theme-pro .nf-empty i{font-size:30px;opacity:.5;margin-bottom:3px;}
html.theme-pro .nf-empty strong{color:var(--nf-ink2);font-size:15px;font-weight:700;}
@media (prefers-reduced-motion:reduce){
  html.theme-pro .nf-card,
  html.theme-pro .nf-new,
  html.theme-pro .nf-flip-in{transition:none!important;}
}

/* ── 22.0-G2 · 같은 문법을 쓰는 이웃 요소 ─────────────────────────────── */
/* 폴더 카드(폴더 화면의 하위 폴더) — 노트 카드와 같은 옷 */
html.theme-pro #noteGrid.nf-grid .folder-card{
  position:relative;display:flex;flex-direction:column;
  width:auto!important;flex:0 1 auto!important;flex-basis:auto!important;
  min-height:118px;margin:0;padding:16px 18px 14px;
  border:1px solid var(--nf-line);border-radius:var(--nf-r-card);
  background:var(--nf-card);box-shadow:var(--nf-sh-card);
  cursor:pointer;overflow:hidden;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
}
html.theme-pro #noteGrid.nf-grid .folder-card:hover{
  transform:translateY(-2px);box-shadow:var(--nf-sh-card-h);border-color:#E4E0F2;
}
html.theme-pro #noteGrid.nf-grid .folder-card.drop{
  border-color:var(--nf-violet);box-shadow:0 0 0 1px var(--nf-violet),var(--nf-sh-card);
}
html.theme-pro #noteGrid.nf-grid .folder-card .folder-thumb{
  height:52px;background:transparent;flex-shrink:0;
  display:flex;align-items:center;justify-content:flex-start;
}
html.theme-pro #noteGrid.nf-grid .folder-card .folder-thumb > i{
  font-size:26px;opacity:1;
}
html.theme-pro #noteGrid.nf-grid .folder-card .folder-thumb > i:hover{transform:none;}
html.theme-pro #noteGrid.nf-grid .folder-card .folder-count{
  position:static;margin-left:8px;background:var(--nf-field);color:var(--nf-sub);
  font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;
}
html.theme-pro #noteGrid.nf-grid .folder-card .note-card-name{
  margin-top:auto;display:flex;align-items:center;gap:8px;min-width:0;
  font-size:14px;font-weight:600;color:var(--nf-ink);letter-spacing:-.01em;
}
html.theme-pro #noteGrid.nf-grid .folder-card .note-card-name > span{
  flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro #noteGrid.nf-grid .folder-card .folder-menu-btn{color:#B6B7C0;}
html.theme-pro #noteGrid.nf-grid .folder-card.locked-folder .folder-thumb{filter:none;}
/* 카드 안 이모지 고르기 — 둥근 작은 팝오버 */
html.theme-pro .nf-card .emoji-picker{
  background:#fff;border:1px solid var(--nf-line);border-radius:14px;
  box-shadow:var(--nf-sh-card-h);padding:7px;gap:3px;width:186px;
}
html.theme-pro .nf-card .emoji-opt{border-radius:9px;}
html.theme-pro .nf-card .emoji-opt:hover{background:var(--nf-hover);}
/* 사이드바 Bookmarks 안 링크 칩 */
html.theme-pro .nf-bm-panel .link-chip{
  border-radius:8px;background:#fff;border:1px solid var(--nf-hair);
  font-size:12.5px;font-weight:500;color:var(--nf-ink2);
}
html.theme-pro .nf-bm-panel .link-chip:hover{background:var(--nf-hover);}
/* 빈 화면의 '새 노트 만들기' 알약 */
html.theme-pro .pro-home-empty .pro-empty-add{
  display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 15px;
  border:0;border-radius:12px;cursor:pointer;
  background:linear-gradient(180deg,var(--nf-violet-hi) 0%,var(--nf-violet-lo) 100%);
  color:#fff;font-family:inherit;font-size:13px;font-weight:600;
  box-shadow:0 8px 18px -8px rgba(139,122,232,.55);
}
html.theme-pro .pro-home-empty .pro-empty-add:hover{filter:brightness(1.04);}
html.theme-pro .pro-home-empty i{font-size:26px;}

/* ── 22.0-H · 오른쪽 칸 — Now Playing · Flashcard · Youpscord ── */
html.theme-pro .nf-widget{
  background:#fff;border:1px solid var(--nf-line);border-radius:var(--nf-r-w);
  padding:16px;box-shadow:var(--nf-sh-card);flex-shrink:0;
}
html.theme-pro .nf-widget.nf-chatw{
  flex:1 1 auto;min-height:180px;display:flex;flex-direction:column;
}
html.theme-pro .nf-widget-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
html.theme-pro .nf-widget-head b{font-size:13.5px;font-weight:700;color:var(--nf-ink);letter-spacing:-.01em;}
html.theme-pro .nf-widget-more{
  width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:#B6B7C0;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro .nf-widget-more i{font-size:17px;}
html.theme-pro .nf-widget-more:hover{background:#F5F4F9;color:var(--nf-violet-ink);}
/* Now Playing */
html.theme-pro .nf-now-body{display:flex;align-items:center;gap:12px;min-width:0;}
html.theme-pro .nf-now-art{
  width:64px;height:64px;border-radius:10px;flex-shrink:0;overflow:hidden;
  background:#EEF0F6;display:flex;align-items:center;justify-content:center;color:#B6B9C6;
}
html.theme-pro .nf-now-art img{width:100%;height:100%;object-fit:cover;display:block;}
html.theme-pro .nf-now-art i{font-size:24px;}
html.theme-pro .nf-now-meta{min-width:0;display:flex;flex-direction:column;gap:3px;}
html.theme-pro .nf-now-title{
  font-size:14px;font-weight:600;color:var(--nf-ink);letter-spacing:-.01em;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro .nf-now-artist{
  font-size:12px;color:var(--nf-sub);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro .nf-now-ctrls{display:flex;align-items:center;justify-content:center;gap:16px;margin:14px 0 12px;}
html.theme-pro .nf-now-btn{
  width:32px;height:32px;border:0;border-radius:50%;background:transparent;color:#3F3F46;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro .nf-now-btn i{font-size:19px;}
html.theme-pro .nf-now-btn:hover{background:#F5F4F9;}
html.theme-pro .nf-now-play{
  width:38px;height:38px;border:0;border-radius:50%;cursor:pointer;color:#fff;
  background:linear-gradient(180deg,#A893E8,#8F79DD);
  box-shadow:0 6px 14px -6px rgba(139,122,232,.6);
  display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro .nf-now-play i{font-size:16px;}
html.theme-pro .nf-now-play:hover{filter:brightness(1.05);}
html.theme-pro .nf-now-prog{
  position:relative;height:5px;border-radius:99px;background:#ECECF1;cursor:grab;
  touch-action:none;user-select:none;
}
html.theme-pro .nf-now-prog.seeking{cursor:grabbing;}
html.theme-pro .nf-now-prog::before{
  content:'';position:absolute;left:0;right:0;top:-10px;bottom:-10px;
}
html.theme-pro .nf-now-prog i{display:block;height:100%;width:0;border-radius:99px;background:#9E8FE5;}
html.theme-pro .nf-now-prog::after{
  content:'';position:absolute;top:50%;left:var(--np,0%);width:11px;height:11px;
  border-radius:50%;background:#9E8FE5;transform:translate(-50%,-50%);
  box-shadow:0 1px 3px rgba(139,122,232,.5);pointer-events:none;
}
html.theme-pro .nf-now-times{
  display:flex;justify-content:space-between;margin-top:7px;
  font-size:11px;color:var(--nf-faint);font-variant-numeric:tabular-nums;
}
/* Flashcard */
html.theme-pro .nf-flash-sub{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
html.theme-pro .nf-flash-sub > span{font-size:12px;color:var(--nf-sub);}
html.theme-pro .nf-flash-sub button{
  width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:#8F90A0;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro .nf-flash-sub button i{font-size:15px;}
html.theme-pro .nf-flash-sub button:hover{background:#F5F4F9;color:var(--nf-violet-ink);}
html.theme-pro .nf-flip{perspective:900px;margin:2px 0 12px;cursor:pointer;}
html.theme-pro .nf-flip-in{position:relative;transform-style:preserve-3d;transition:transform .5s cubic-bezier(.4,.1,.2,1);}
html.theme-pro .nf-flip.flipped .nf-flip-in{transform:rotateX(180deg);}
html.theme-pro .nf-face{backface-visibility:hidden;-webkit-backface-visibility:hidden;}
html.theme-pro .nf-face.nf-back{position:absolute;inset:0;transform:rotateX(180deg);}
html.theme-pro .nf-flash-q{
  min-height:76px;display:flex;align-items:center;justify-content:center;text-align:center;
  padding:14px 12px;border-radius:12px;background:#FAFAFC;border:1px solid #F1F0F5;
  font-size:14.5px;font-weight:600;color:var(--nf-ink);line-height:1.5;word-break:break-word;
}
html.theme-pro .nf-flash-hint{display:block;text-align:center;font-size:12px;color:var(--nf-faint);}
/* Youpscord */
html.theme-pro .nf-chat-msgs{
  display:flex;flex-direction:column;gap:10px;
  flex:1 1 auto;min-height:120px;overflow-y:auto;
  margin-bottom:12px;padding:2px;
}
html.theme-pro .nf-chat-msgs:has(.nf-chat-empty){justify-content:center;}
html.theme-pro .nf-chat-line{display:flex;align-items:flex-end;gap:6px;min-width:0;}
html.theme-pro .nf-chat-line .nf-chat-bubble{
  max-width:78%;padding:8px 12px;border-radius:14px;
  font-size:12.5px;line-height:1.45;color:var(--nf-ink);word-break:break-word;
}
html.theme-pro .nf-chat-line.other .nf-chat-bubble{background:#fff;border:1px solid #ECEAF1;}
html.theme-pro .nf-chat-line.me .nf-chat-bubble{background:#EAE7FD;}
html.theme-pro .nf-chat-line .nf-chat-time{font-size:10.5px;color:var(--nf-faint);white-space:nowrap;padding-bottom:2px;}
html.theme-pro .nf-chat-empty{
  text-align:center;font-size:12px;color:var(--nf-faint);padding:20px 8px;line-height:1.6;cursor:pointer;
}
html.theme-pro .nf-chat-input{display:flex;align-items:center;gap:8px;}
html.theme-pro .nf-chat-input input{
  flex:1;min-width:0;height:38px;border:0;border-radius:999px;background:var(--nf-field);
  padding:0 16px;font-family:inherit;font-size:12.5px;color:var(--nf-ink);outline:none;
}
html.theme-pro .nf-chat-input input::placeholder{color:var(--nf-faint);}
html.theme-pro .nf-chat-input button{
  width:34px;height:34px;flex-shrink:0;border:0;border-radius:50%;cursor:pointer;color:#fff;
  background:linear-gradient(180deg,var(--nf-teal-hi),var(--nf-teal-lo));
  display:inline-flex;align-items:center;justify-content:center;
  box-shadow:0 4px 10px -4px rgba(111,176,193,.6);
}
html.theme-pro .nf-chat-input button i{font-size:14px;}

/* ── 22.0-I · 이동 경로(브레드크럼) · 검색 안내 · 해돌이 답 ───────── */
html.theme-pro #breadcrumb{padding:0 0 4px;margin-bottom:10px;flex-wrap:wrap;gap:4px;line-height:1.5;}
html.theme-pro #breadcrumb button{
  display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 11px;
  border:1px solid #E7E7EE;border-radius:99px;background:#fff;
  font-family:inherit;font-size:12.5px;font-weight:600;color:var(--nf-ink2);cursor:pointer;
}
html.theme-pro #breadcrumb button:hover{border-color:#D9D6E8;color:var(--nf-ink);}
html.theme-pro #breadcrumb > span[style]{font-size:12.5px;}
html.theme-pro #breadcrumb .bc-ic{
  width:30px;padding:0;justify-content:center;border-radius:50%!important;color:var(--nf-sub);
}
html.theme-pro #breadcrumb .bc-ic i{font-size:14px;}
html.theme-pro .pro-results{
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;
  padding:9px 12px;margin-bottom:14px;border:1px solid var(--nf-line);border-radius:12px;
  background:#fff;font-size:13px;color:var(--nf-ink2);box-shadow:var(--nf-sh-card);
}
html.theme-pro .pro-results-x{
  min-height:30px;width:30px;padding:0;border:1px solid transparent;border-radius:8px;
  background:transparent;color:var(--nf-sub);font-size:16px;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro .pro-results-x:hover{background:var(--nf-hover);color:var(--nf-ink2);}
html.theme-pro .home-ai-card{
  border:1px solid var(--nf-line);border-radius:var(--nf-r-card);background:#fff;
  box-shadow:var(--nf-sh-card);margin-bottom:16px;overflow:hidden;
}
html.theme-pro .home-ai-head{
  display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--nf-hair);
}
html.theme-pro .home-ai-name{font-size:13.5px;font-weight:700;color:var(--nf-ink);}
html.theme-pro .home-ai-name i{color:var(--nf-violet);}
html.theme-pro .home-ai-mini{
  width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:var(--nf-sub);cursor:pointer;
}
html.theme-pro .home-ai-mini:hover{background:var(--nf-hover);color:var(--nf-ink2);}
html.theme-pro .home-ai-out{padding:14px;font-size:14px;line-height:1.7;color:var(--nf-ink);}

/* ── 22.0-J · 팝업 메뉴(ctx) — 둥근 시스템 메뉴 (전 테마 공용) ────── */
.ctx-menu{
  --mnu-surf:#FFFFFF;
  --mnu-line:#EDEEF3;
  --mnu-t1:#1C1C28;
  --mnu-t2:#4B5563;
  --mnu-fill:#F5F5F8;
  background:var(--mnu-surf)!important;
  border:1px solid var(--mnu-line)!important;
  border-radius:calc(16px * var(--ctxz))!important;
  box-shadow:0 1px 2px rgba(16,24,40,.04),0 16px 40px -16px rgba(16,24,40,.24)!important;
  backdrop-filter:none;-webkit-backdrop-filter:none;
  padding:calc(6px * var(--ctxz))!important;
  min-width:calc(200px * var(--ctxz));
}
html.theme-pro .ctx-menu,
html.theme-pro .ctx-menu.show{
  border-radius:calc(16px * var(--ctxz))!important;
  border:1px solid var(--mnu-line)!important;
  box-shadow:0 1px 2px rgba(16,24,40,.04),0 16px 40px -16px rgba(16,24,40,.24)!important;
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
.ctx-item{
  min-height:calc(40px * var(--ctxz));
  border-radius:calc(10px * var(--ctxz))!important;
  font-size:calc(13px * var(--ctxz));
  font-weight:500;letter-spacing:-.01em;
  color:var(--mnu-t1);
  transition:background .13s ease;
}
.ctx-item i{color:var(--mnu-t2);font-size:calc(16px * var(--ctxz));}
.ctx-item:hover{background:var(--mnu-fill)!important;}
.ctx-item.danger,.ctx-item.danger i{color:#E02424;}
.ctx-item.danger:hover{background:rgba(224,36,36,.10)!important;}
.ctx-sep{background:var(--mnu-line);margin:calc(5px * var(--ctxz)) calc(6px * var(--ctxz));}
.ctx-key{color:#9CA3AF;}
html.dark .ctx-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --mnu-surf:#1B202A;
  --mnu-line:rgba(243,245,249,.12);
  --mnu-t1:#F3F5F9;
  --mnu-t2:#A7AEBC;
  --mnu-fill:#262C38;
}

/* ── 22.0-K · 사이드바 팝오버(알림·서버 상태) ────────────────────── */
html.theme-pro .notif-pop,
html.theme-pro .srv-pop{
  background:var(--oui-surf);
  border:1px solid var(--oui-line);
  border-radius:var(--oui-r-pop)!important;
  box-shadow:var(--oui-shadow);
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
html.theme-pro .notif-head b{font-size:16px;font-weight:800;letter-spacing:-.02em;color:var(--oui-t1);}
html.theme-pro .notif-head button{
  background:var(--oui-surf2);border:0;border-radius:99px;
  font-size:12px;font-weight:700;color:var(--oui-t2);
}
html.theme-pro .notif-head button:hover{background:var(--oui-surf3);}
html.theme-pro .notif-item:hover{background:var(--oui-surf2);}

/* ── 22.0-L · 선택 작업판(select-bar) ────────────────────────────── */
html.theme-pro .select-bar{
  background:var(--oui-surf);
  border:1px solid var(--oui-line);
  border-radius:var(--oui-r-pop)!important;
  box-shadow:var(--oui-shadow-lg);
  padding:12px 14px;gap:10px;
}
html.theme-pro .select-bar > span{font-size:13px;font-weight:700;color:var(--oui-t2);letter-spacing:-.01em;}
html.theme-pro .select-bar button{
  border-radius:99px!important;
  font-weight:700!important;letter-spacing:-.01em!important;
  transition:filter .15s ease,transform .12s ease;
}
html.theme-pro .select-bar button:active{transform:scale(.96);}
html.theme-pro .select-bar button:nth-of-type(1){
  background:var(--oui-grad-acc)!important;border:0!important;color:#fff!important;
  box-shadow:0 4px 12px rgba(139,122,232,.32)!important;
}
html.theme-pro .select-bar button:nth-of-type(2){
  background:var(--oui-surf2)!important;border:1px solid var(--oui-line)!important;color:var(--oui-t1)!important;
}
html.theme-pro .select-bar button:nth-of-type(3){
  background:linear-gradient(135deg,#FF6B6B,#E02424)!important;border:0!important;color:#fff!important;
  box-shadow:0 4px 12px rgba(224,36,36,.28)!important;
}
html.theme-pro .select-bar button:nth-of-type(4){
  background:var(--oui-surf2)!important;border:1px solid var(--oui-line)!important;color:var(--oui-t2)!important;
}

/* ── 22.0-M · 모달 — 둥근 시트 ───────────────────────────────────── */
html.theme-pro .modal-bg .modal-box{
  border-radius:var(--oui-r-sheet)!important;
  border:1px solid var(--oui-line);
  box-shadow:var(--oui-shadow)!important;
}
html.theme-pro .modal-box h3.text-lg{letter-spacing:-.02em;}
html.theme-pro .size-preset-card{
  border-radius:14px!important;
  border:1px solid var(--oui-line);
  transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease;
}
html.theme-pro .size-preset-card:hover{
  border-color:var(--oui-acc-line);
  box-shadow:0 0 0 3px var(--oui-acc-soft);
}
html.theme-pro .size-preset-card.on{
  border-color:var(--oui-acc);
  box-shadow:0 0 0 3px var(--oui-acc-soft);
}
/* 집기 고스트 — 둥근 알약 */
html.theme-pro #liftGhost{
  border-radius:12px!important;
  background:linear-gradient(135deg,#A893E8 55%,#6F5CC4)!important;
  box-shadow:0 12px 28px -10px rgba(111,92,196,.5)!important;
}
/* 26.0 · 홈 장면 페이드 — 키프레임(좁은 화면 블록 밖에 둔다) */
@keyframes nfSceneIn{
  from{opacity:0;translate:0 8px;}
  to{opacity:1;translate:0 0;}
}
/* 홈에서 뜨는 창의 바탕(스크림)도 투명도로만 나타난다 */
@keyframes nfScrimIn{
  from{opacity:0;}
  to{opacity:1;}
}
@keyframes nfHeadIn{
  from{opacity:0;translate:0 3px;}
  to{opacity:1;translate:0 0;}
}

/* ══ 24.0 · DARK BEGIN (scripts/dark-theme.mjs 가 관리) ══ */
/* ═══════════════════════════════════════════════════════════════════
   24.0-dark-auto · 라이트 CSS 에서 색만 뒤집어 만든 오버라이드 (583개 규칙)
   scripts/dark-theme.mjs 가 생성한다 — 손으로 고치지 말고 dark-core.css 를 고칠 것.
   ═══════════════════════════════════════════════════════════════════ */
/* 24.0-dark-auto BEGIN (scripts/dark-theme.mjs 생성 — 직접 고치지 말 것) */
html.theme-pro.theme-dark #splash .sp-bar i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,var(--accent),#2D1957);
}
html.theme-pro.theme-dark #clawFx .claw-wire:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,#49525c,#363B45 45%,#49525c);
}
html.theme-pro.theme-dark .link-chip .lc-del:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571F19;
}
html.theme-pro.theme-dark .offline-badge.off:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .offline-badge.wait:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F2B14B;
}
html.theme-pro.theme-dark #welcomeToast .wc-ico:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#193157,#2C1957);
}
html.theme-pro.theme-dark .tb-content a:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#5D8BF0;
}
html.theme-pro.theme-dark .import-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#2964E7;
}
html.theme-pro.theme-dark .vd-f-star i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:var(--vd-c-star,#F4B859);
}
html.theme-pro.theme-dark .vd-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--vd-card,#1B1E23) 92%,transparent);
}
html.theme-pro.theme-dark .vd-dialog:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .vd-sto-bar i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,var(--vd-acc),color-mix(in srgb,var(--vd-acc) 60%,#194157));
}
html.theme-pro.theme-dark .vd-sto-bar-disk i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,#192E57,#291957);
}
html.theme-pro.theme-dark .vd-sw-stk:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#281957;
}
html.theme-pro.theme-dark .vd-sw-tr:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#573F19;
}
html.theme-pro.theme-dark .more-grid button.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .more-grid button.danger i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark #textColorWrap .main:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #hlWrap .main:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #textColorWrap .main:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #hlWrap .main:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark #hlWrap .main .glyph:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EBEDEF;
}
html.theme-pro.theme-dark .color-swatch:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid rgba(255,255,255,.156);
}
html.theme-pro.theme-dark .sp-x:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .tb-content [data-ck="1"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DF0BA;
}
html.theme-pro.theme-dark .pin:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574019;
}
html.theme-pro.theme-dark .pin.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#192D57;
}
html.theme-pro.theme-dark .pin-pop button.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .present img:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .present-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .present-bar button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .present-bar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .wf.pick:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#6080DC!important;
}
html.theme-pro.theme-dark .wf-bar .scale:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,#192D57,#1D4ED8,#11348A);
}
html.theme-pro.theme-dark .page-del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .tbl-bar button.danger:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .tbl-color .tbl-fill-chip.full:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574D19;
}
html.theme-pro.theme-dark #favBtn.active:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B548;
}
html.theme-pro.theme-dark #favBtn.active:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B548;
}
html.theme-pro.theme-dark .page-fav:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B548;
}
html.theme-pro.theme-dark .page-fav.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B548;
}
html.theme-pro.theme-dark .snap-line:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571933;
}
html.theme-pro.theme-dark .snap-line.center:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#2C1957;
}
html.theme-pro.theme-dark .snap-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571933;
}
html.theme-pro.theme-dark .handle:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:max(calc(var(--hdl-sz)/6),calc(2.2px/var(--pz,1))) solid var(--card,#2B2F37);
}
html.theme-pro.theme-dark .el-del:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571F19;
}
html.theme-pro.theme-dark .latex-box.imported>.latex-content:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EBEDEF;
}
html.theme-pro.theme-dark .tb.pdf-text .imath.imath-imp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EBEDEF;
}
html.theme-pro.theme-dark .paper-img.math:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .paper-img.math img:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .tb.empty .tb-content:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:rgba(255,255,255,.122)!important;
}
html.theme-pro.theme-dark .tool-cursor.pen:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1.5px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.156);
}
html.theme-pro.theme-dark .tool-cursor.eraser:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px dotted #EB4848;
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .tool-cursor .dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .text-ghost .tg-label:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .place-ghost .tg-label:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,var(--accent),#2C1957);
}
html.theme-pro.theme-dark .text-ghost .tg-label kbd:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .place-ghost .tg-label kbd:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .text-ghost .tg-label .tg-size:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .text-ghost .tg-corner:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .table-ghost .tg-label:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,var(--accent),#2C1957);
}
html.theme-pro.theme-dark .table-ghost .tg-label kbd:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .dt-colors:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .draw-toolbar .dt-colors .color-pick:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px solid #2B2F37;
}
html.theme-pro.theme-dark .draw-toolbar .dt-colors .color-pick.sel:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#2B2F37;
}
html.theme-pro.theme-dark #penCustom.color-pick:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px solid #2B2F37;
  background:conic-gradient(from 210deg,#571919,#574119,#574D19,#195730,#193957,#361957,#571919);
}
html.theme-pro.theme-dark #penCustom.color-pick.sel:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#2B2F37;
}
html.theme-pro.theme-dark .modal-bg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .tgl .dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .trash-item button.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .size-preset-thumb:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .emoji-badge:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.078);
}
html.theme-pro.theme-dark .emoji-opt:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.104);
}
html.theme-pro.theme-dark .lock-overlay:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .ctx-item.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ctx-item.danger i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .cd-hard .h b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-ng:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .cd-done i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DF0BA;
}
html.theme-pro.theme-dark .cd-pinfo.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .cd-pinfo.ok b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .cd-pinfo.bad:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .cd-grade .g0:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-grade .g1:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F59247;
}
html.theme-pro.theme-dark .cd-grade .g2:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#5D8BF0;
}
html.theme-pro.theme-dark .cd-grade .g3:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .cd-opt.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#15C188;
  color:#47F5BF;
}
html.theme-pro.theme-dark .cd-opt.ok i.num:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#15C188;
}
html.theme-pro.theme-dark .cd-opt.no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#EB4848;
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-opt.no i.num:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
  border-color:#EB4848;
}
html.theme-pro.theme-dark .cd-typeres.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .cd-typeres.no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-hard .h b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-tile.bad:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#EB4848;
}
html.theme-pro.theme-dark .cd-mdone .best:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DF0BA;
}
html.theme-pro.theme-dark .cd-br .cs em.bad:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-br .cs em.good:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .rep-w .mine:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .rep-w .real:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .ana-row .track i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,var(--accent),#2C1957);
}
html.theme-pro.theme-dark .ana-weak b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .cd-streak:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,#574019 14%,var(--bg2));
  color:#F59247;
}
html.theme-pro.theme-dark .cd-memory .line:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,#574019 0%,#193557 48%,#10b981 100%);
}
html.theme-pro.theme-dark .cd-topbar .cd-back[title="학습 나가기"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .srv-zone.z-bad:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#F47C7C;
}
html.theme-pro.theme-dark .srv-zone.z-warn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#F5B548;
}
html.theme-pro.theme-dark .srv-zone.z-good:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#4DF0BA;
}
html.theme-pro.theme-dark .srv-pop.warn .srv-dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574019;
}
html.theme-pro.theme-dark .srv-pop.bad .srv-dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .srv-pop.down .srv-dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#363B45;
}
html.theme-pro.theme-dark .srv-fillbar.w:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574019;
}
html.theme-pro.theme-dark .srv-fillbar.b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .notif-head span:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .notif-item[data-kind="error"] .notif-ico:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .notif-item[data-kind="server"] .notif-ico:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .notif-item[data-kind="study"] .notif-ico:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5A447;
}
html.theme-pro.theme-dark .notif-item[data-kind="achievement"] .notif-ico:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#47F5BF;
}
html.theme-pro.theme-dark .notif-del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .note-card:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  background:linear-gradient(115deg,transparent 32%,rgba(30,33,39,.4) 48%,transparent 62%);
}
html.theme-pro.theme-dark #trProg .tr-cancel:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#57191B;
}
html.theme-pro.theme-dark #staleBar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid color-mix(in srgb,#E69A1A 55%,var(--border));
}
html.theme-pro.theme-dark #staleBar>i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B548;
}
html.theme-pro.theme-dark .mp-pl i:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .mp-plsub .pl-rm:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .mp-li .mp-del:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .pl-mini button.d:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .mpb-qop.del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .mp-lyrfind:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#556181;
}
html.theme-pro.theme-dark .mpctx .ci.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .mpctx .ci.danger i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .mp-tagm:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .mp-addpop .cookies button.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#15C188;
  color:#4DF0BA;
}
html.theme-pro.theme-dark .mp-addpop .ytcheck.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DF0BA;
}
html.theme-pro.theme-dark .mp-addpop .ytcheck.no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B548;
}
html.theme-pro.theme-dark .mp-addpop .ytdel:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .mp-addpop .qfill:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,var(--accent),#2C1957);
}
html.theme-pro.theme-dark .mp-addpop .qitem.ok .qi:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DF0BA;
}
html.theme-pro.theme-dark .mp-addpop .qitem.fail .qi:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .mp-addpop .qitem.fail .qt:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .mp-addpop .ready.no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574019;
}
html.theme-pro.theme-dark .fc-ring.warn .bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#F5B548;
}
html.theme-pro.theme-dark .fc-ring.over .bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#F47C7C;
}
html.theme-pro.theme-dark .fc-lap.best .gap:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DF0BA;
}
html.theme-pro.theme-dark .fc-lap.worst .gap:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark #focusClock.done .fc-time:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark .fc-done-msg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark #mpBig .mpb-ctl .pp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px solid #2B2F37!important;
}
html.theme-pro.theme-dark #mpBig .mpb-ctl .pp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig .mpb-ctl .pp:focus-visible:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#2B2F37!important;
}
html.theme-pro.theme-dark .mpb-reco-art:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .mpb-album-art:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,var(--accent),#2D1957);
}
html.theme-pro.theme-dark .mpb-reco-play:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.94);
}
html.theme-pro.theme-dark #mpBig.mpb-fs :not(:where(.sdy-editor-light,.sdy-editor-light *))::selection{
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .mpb-blob.a:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:radial-gradient(circle at 50% 50%,var(--amb2,#2D1957) 0%,transparent 62%);
}
html.theme-pro.theme-dark .mpb-blob.b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:radial-gradient(circle at 50% 50%,var(--amb1,#192557) 0%,transparent 62%);
}
html.theme-pro.theme-dark .mpb-ambient-veil:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:radial-gradient(130% 95%at 50% 112%,rgba(4,6,10,.86) 0%,rgba(4,6,10,.26) 46%,rgba(255,255,255,.05) 100%),linear-gradient(180deg,rgba(255,255,255,.16) 0%,rgba(255,255,255,.16) 26%,rgba(255,255,255,.16) 62%,rgba(4,6,10,.6) 100%);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-head:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,rgba(255,255,255,.16),rgba(255,255,255,.05))!important;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-head button:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-head button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-head button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-head button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
}
html.theme-pro.theme-dark .mpb-head-eq i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.75);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-chips span:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-chips span:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:-webkit-full-screen .mpb-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #mpBig.mpb-fs #mpBFill:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen #mpBFill:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:-webkit-full-screen #mpBFill:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #mpBig.mpb-fs #mpBKnob:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen #mpBKnob:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:-webkit-full-screen #mpBKnob:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border-color:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-ctl button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-ctl button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-ctl button.on:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-ctl button.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-ctl .pp:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-ctl .pp:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:-webkit-full-screen .mpb-ctl .pp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px solid #2B2F37!important;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-ctl .pp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-ctl .pp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:-webkit-full-screen .mpb-ctl .pp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#2B2F37!important;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-row2 #mpBRate:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-row2 #mpBRate:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-row2 #mpBRate:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:rgba(255,255,255,.14);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-row2 #mpBRate.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EBEDEF;
  background:#1B1E23;
  border-color:#2B2F37;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-ric:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-ric:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-ric:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-ric:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-drawer-in:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-drawer-in:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
  border-left:1px solid rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-tabs button:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-tabs button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-tabs button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-tabs button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:rgba(255,255,255,.105);
}
html.theme-pro.theme-dark #mpBig.mpb-fs #mpBUp:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen #mpBUp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
  border-color:rgba(255,255,255,.06)!important;
}
html.theme-pro.theme-dark #mpBig.mpb-fs #mpBUp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen #mpBUp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-list:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-list:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-top-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-li:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-li:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-pager button:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-pager button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-pager .mpb-goto input:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-pager .mpb-goto input:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-group-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-group-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-reco-current:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-reco-current:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-searchbar:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-searchbar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-searchbar:focus-within:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-searchbar:focus-within:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:rgba(255,255,255,.175);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-searchbar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-searchbar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-li.on .mp-eqbars i:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-li.on .mp-eqbars i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .eq-sw.on span:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .eq-presets button[data-eqp="0"].on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,var(--accent),#2D1957);
}
html.theme-pro.theme-dark .mp-eqpop .eq-note:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B747;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mp-eqpop:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mp-eqpop:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mp-eqpop .eq-mini:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mp-eqpop .eq-mini:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mp-eqpop .eq-sw:not(.on):not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mp-eqpop .eq-sw:not(.on):not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.077);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mp-eqpop .eq-presets button:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mp-eqpop .eq-presets button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mp-eqpop .eq-presets button[data-eqp="0"].on:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mp-eqpop .eq-presets button[data-eqp="0"].on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#192157,#381957);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mp-eqpop canvas:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mp-eqpop canvas:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
  border-color:rgba(255,255,255,.06);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-drawer-in:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-drawer-in:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-top:1px solid rgba(255,255,255,.06);
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-drawer:not(:where(.sdy-editor-light,.sdy-editor-light *))::before,html.theme-pro.theme-dark #mpBig:fullscreen .mpb-drawer:not(:where(.sdy-editor-light,.sdy-editor-light *))::before{
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #ypReopen:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark #ypReopen .yp-badge.yp-voice:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#50EC91;
}
html.theme-pro.theme-dark .yp-head .yp-ttl svg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F9A888;
}
html.theme-pro.theme-dark .yp-head button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .yp-voice:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-bottom:1px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .yp-voice.invoice:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,rgba(124,58,237,.34),rgba(192,38,211,.34),rgba(124,58,237,.34)),rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .ypv-join:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark .ypv-cnt:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#50EC91;
}
html.theme-pro.theme-dark .ypv-mute.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
  border-color:#EB4848;
}
html.theme-pro.theme-dark .ypv-icon.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#301957,#c026d3);
}
html.theme-pro.theme-dark .yp-vchip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .yp-vchip .st:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-vchip .st.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#5AE28C;
}
html.theme-pro.theme-dark .yp-bgm:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-bottom:1px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .yp-bgm-meta span:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .yp-bgm input[type=text]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .yp-bgm input[type=text]:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#8E64EE;
}
html.theme-pro.theme-dark .yp-bgm input[type=text]:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-bgm-res:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .yp-bgm-res button em:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-bgm-empty:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-ava:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#DEE0E4;
}
html.theme-pro.theme-dark .yp-who:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .yp-line.me .yp-bub:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark .yp-del:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .yp-del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .yp-file:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .yp-file .fi:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#B496F9;
}
html.theme-pro.theme-dark .yp-file .fs:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-time:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-reacts button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .yp-reacts button.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
  background:#191E57;
}
html.theme-pro.theme-dark .yp-sys:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .yp-empty:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-tools button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .yp-tools button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#B496F9;
}
html.theme-pro.theme-dark .yp-draft-chip button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#D4D9E2;
}
html.theme-pro.theme-dark .yp-draft-chip button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .yp-input textarea:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .yp-input textarea:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-send:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark .yp-set-title:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-set-row .sub:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .yp-set-row input[type=text]:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .yp-switch i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#363B45;
}
html.theme-pro.theme-dark .yp-switch.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#191E57;
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .yp-switch.on i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:radial-gradient(120% 90%at 50% 0%,#1B1E23 0%,#1E2127 46%,#1E2127 100%);
}
html.theme-pro.theme-dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *))::before{
  background:radial-gradient(62% 42%at 50% -6%,rgba(30,33,39,.85),transparent 70%);
}
html.theme-pro.theme-dark .modal-bg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .toast:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
  border:1px solid rgba(255,255,255,.06);
}
html.theme-pro.theme-dark .editor-toolbar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.75)!important;
  border-bottom:1px solid rgba(255,255,255,.104)!important;
}
html.theme-pro.theme-dark #edTitle:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.052);
}
html.theme-pro.theme-dark .tb-group:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.05)!important;
  border:1px solid rgba(255,255,255,.052)!important;
}
html.theme-pro.theme-dark .tool-btn.core-tool:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#5D8BF0!important;
}
html.theme-pro.theme-dark .pg-nav:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.05)!important;
  border:1px solid rgba(255,255,255,.065)!important;
}
html.theme-pro.theme-dark .tool-sep:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.104)!important;
}
html.theme-pro.theme-dark .paper:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid rgba(255,255,255,.078)!important;
}
html.theme-pro.theme-dark #welcomeToast:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
  border:1px solid rgba(255,255,255,.06);
}
html.theme-pro.theme-dark .paper-ticker:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-bottom:1px solid #1C56BA;
}
html.theme-pro.theme-dark .paper-ticker-lead:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-right:1px solid rgba(255,255,255,.088);
}
html.theme-pro.theme-dark .paper-ticker-paper:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-right:1px solid rgba(255,255,255,.105);
}
html.theme-pro.theme-dark .paper-ticker-paper:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .paper-ticker-paper:focus-visible:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #sdyAuthWrap:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .sa-sendbtn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 72%,#2C1957));
}
html.theme-pro.theme-dark .sa-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,var(--accent),color-mix(in srgb,var(--accent) 72%,#2C1957));
}
html.theme-pro.theme-dark .sa-pwneed:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F59247;
}
html.theme-pro.theme-dark .sa-err:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F47C7C;
}
html.theme-pro.theme-dark #ypGate:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .ypg-sub:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .ypg-btn>i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .ypg-btn em:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .ypg-btn.main:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#271957);
}
html.theme-pro.theme-dark .ypg-btn.main:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191F57,#271957);
}
html.theme-pro.theme-dark .yp-verified:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#9199F6;
}
html.theme-pro.theme-dark .yp-set-login:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .mp-li .mp-upmark:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E5BE57;
}
html.theme-pro.theme-dark #ypHead .yp-frdot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .ypfr-ttl:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .ypfr-ttl .cnt.hot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .ypfr-add input:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#8E64EE;
}
html.theme-pro.theme-dark .ypfr-add input:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#A4A8B1;
}
html.theme-pro.theme-dark .ypfr-add button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark .ypfr-empty:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .ypfr-ava:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#DEE0E4;
  background:linear-gradient(135deg,#192457,#4E1957);
}
html.theme-pro.theme-dark .ypfr-meta span:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A4A8B1;
}
html.theme-pro.theme-dark .ypfr-meta .last:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .ypfr-unread:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571919;
}
html.theme-pro.theme-dark .ypfr-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark .ypfr-btn.main:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark .ypfr-btn.ghost:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C7CACF;
}
html.theme-pro.theme-dark .ypfr-btn.ghost:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#EB4848;
}
html.theme-pro.theme-dark .ypfr-login:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .ypfr-login button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191E57,#2C1957);
}
html.theme-pro.theme-dark #ypReopen .yp-badge.yp-dm:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#571924,#571919);
}
html.theme-pro.theme-dark .yp-dm-more:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .yp-dm-more:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5D69ED;
}
html.theme-pro.theme-dark #mpBig.mpb-fs .mpb-tabs button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpBig:fullscreen .mpb-tabs button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .fcard-win:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.985) 0%,rgba(30,33,39,.975) 50%,rgba(30,33,39,.975) 100%)!important;
  background-image:radial-gradient(circle,rgba(120,135,215,.13) 1.2px,transparent 1.2px),linear-gradient(135deg,rgba(30,33,39,.985) 0%,rgba(30,33,39,.975) 50%,rgba(30,33,39,.975) 100%)!important;
  border:1px solid rgba(255,255,255,.2)!important;
}
html.theme-pro.theme-dark .fcard-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,rgba(30,33,39,.94) 0%,rgba(30,33,39,.9) 100%)!important;
  border-bottom:1px solid rgba(255,255,255,.2)!important;
}
html.theme-pro.theme-dark .fcard-win.fcard-max:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:radial-gradient(circle at 8% 12%,rgba(99,102,241,.12),transparent 36%),radial-gradient(circle at 92% 88%,rgba(236,72,153,.10),transparent 40%),radial-gradient(circle at 85% 15%,rgba(56,189,248,.10),transparent 35%),linear-gradient(180deg,rgba(30,33,39,.985),rgba(30,33,39,.98))!important;
  background-image:radial-gradient(circle,rgba(120,135,215,.13) 1.2px,transparent 1.2px),radial-gradient(circle at 8% 12%,rgba(99,102,241,.12),transparent 36%),radial-gradient(circle at 92% 88%,rgba(236,72,153,.10),transparent 40%),radial-gradient(circle at 85% 15%,rgba(56,189,248,.10),transparent 35%),linear-gradient(180deg,rgba(30,33,39,.985),rgba(30,33,39,.98))!important;
}
html.theme-pro.theme-dark .fcard-win.fcard-max .fcard-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.94)!important;
  border-bottom:1px solid rgba(255,255,255,.2)!important;
}
html.theme-pro.theme-dark .cd-hero:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.95) 0%,rgba(30,33,39,.9) 100%);
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .cd-hero-tag:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 12%,rgba(30,33,39,.75));
  border:1px solid color-mix(in srgb,var(--accent) 25%,rgba(255,255,255,.2));
}
html.theme-pro.theme-dark .cd-tip-item:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.6);
  border:1px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win.fcard-max .cd-deck:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.86) 0%,rgba(30,33,39,.72) 100%);
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .otter-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.94);
  border:1.5px solid color-mix(in srgb,var(--accent) 35%,rgba(255,255,255,.2));
}
html.theme-pro.theme-dark .otter-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  border-top-color:rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .cd-qchip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 12%,rgba(30,33,39,.8));
  border:1px solid color-mix(in srgb,var(--accent) 30%,rgba(255,255,255,.2));
}
html.theme-pro.theme-dark .cd-qq:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.88) 0%,rgba(30,33,39,.75) 100%);
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win.fcard-max .cd-face:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.9) 0%,rgba(30,33,39,.76) 100%);
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .cd-reveal:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px dashed color-mix(in srgb,var(--accent) 35%,rgba(255,255,255,.2));
  background:linear-gradient(135deg,rgba(30,33,39,.55) 0%,color-mix(in srgb,var(--accent) 6%,rgba(30,33,39,.45)) 100%);
}
html.theme-pro.theme-dark .cd-reveal:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 12%,rgba(30,33,39,.8));
}
html.theme-pro.theme-dark .fcard-win .cd-opt:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1.5px solid rgba(255,255,255,.2);
  background:linear-gradient(135deg,rgba(30,33,39,.86) 0%,rgba(30,33,39,.72) 100%);
}
html.theme-pro.theme-dark .fcard-win .cd-opt i.num:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 15%,rgba(30,33,39,.8));
}
html.theme-pro.theme-dark .fcard-win .cd-opt.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#5DC115!important;
}
html.theme-pro.theme-dark .fcard-win .cd-opt.ok i.num:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .fcard-win .cd-opt.no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#571919,#571919)!important;
}
html.theme-pro.theme-dark .fcard-win .cd-opt.no i.num:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .fcard-win .cd-opt.pick:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 18%,rgba(30,33,39,.88))!important;
}
html.theme-pro.theme-dark .fcard-win .cd-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.6);
  border:1px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win #cdProgFill:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,#191B57,#2C1957 55%,#571938);
}
html.theme-pro.theme-dark .fcard-win .cd-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.75);
  border:1px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .cd-keyhints b:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid rgba(255,255,255,.2);
  background:rgba(30,33,39,.7);
}
html.theme-pro.theme-dark .fcard-win .fc-mode:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.86) 0%,rgba(30,33,39,.72) 100%);
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win .cd-stat:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.9) 0%,color-mix(in srgb,var(--accent) 8%,rgba(30,33,39,.8)) 100%);
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win .cd-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1.5px solid rgba(255,255,255,.2);
  background:linear-gradient(135deg,rgba(30,33,39,.88) 0%,rgba(30,33,39,.76) 100%);
}
html.theme-pro.theme-dark .fcard-win .cd-btn.primary:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191B57,#2C1957 60%,#391957)!important;
  border-color:rgba(255,255,255,.14)!important;
}
html.theme-pro.theme-dark .fcard-win.fcard-max .cd-tile:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,rgba(30,33,39,.88),rgba(30,33,39,.75));
  border:1.5px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win .cd-tile.pick:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 18%,rgba(30,33,39,.88));
}
html.theme-pro.theme-dark .fcard-win .ex-item:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--card) 75%,rgba(30,33,39,.6));
  border:1px dashed color-mix(in srgb,var(--accent) 30%,rgba(255,255,255,.2));
}
html.theme-pro.theme-dark .fcard-win .ex-n:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 15%,rgba(30,33,39,.8));
}
html.theme-pro.theme-dark .fcard-win .ex-item.ex-right:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,#1A5637 16%,rgba(30,33,39,.7));
}
html.theme-pro.theme-dark .fcard-win .ex-item.ex-right .ex-n:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1A5637;
}
html.theme-pro.theme-dark .fcard-win .ex-item.ex-wrong .ex-n:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
  color:#CE6E85;
}
html.theme-pro.theme-dark .fcard-win .cd-streak:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#DDA65F;
}
html.theme-pro.theme-dark .fcard-win .cd-back:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 10%,rgba(30,33,39,.7));
  border:1px solid rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .fcard-win .cd-back:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 20%,rgba(30,33,39,.9));
}
html.theme-pro.theme-dark svg.om-correct .om-blush:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  fill:#FBBBCD;
}
html.theme-pro.theme-dark .om-say:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border:2px solid #A15D35;
  color:#CF916D;
}
html.theme-pro.theme-dark .om-say:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  border-top-color:#A15D35;
}
html.theme-pro.theme-dark .ai-ask-action:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark .ai-diagram-toggle[aria-pressed="true"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:color-mix(in srgb,#A586E3 88%,var(--text1));
  background:color-mix(in srgb,#2C1957 14%,transparent);
}
html.theme-pro.theme-dark .ai-askbar.edit-on .ai-askbar-field:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:color-mix(in srgb,#A85FED 72%,var(--g-brd));
}
html.theme-pro.theme-dark .ai-edittag:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid color-mix(in srgb,#A85FED 42%,transparent);
  color:color-mix(in srgb,#C690F9 78%,var(--text1));
  background:color-mix(in srgb,#391957 12%,var(--g-in));
}
html.theme-pro.theme-dark .ai-dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574019;
}
html.theme-pro.theme-dark #aiStop.ai-mini:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#DC6C61;
}
html.theme-pro.theme-dark .ai-diagram-hero:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(132deg,color-mix(in srgb,var(--accent) 9%,var(--card)),color-mix(in srgb,#573A19 8%,var(--card)) 55%,color-mix(in srgb,#1C5448 9%,var(--card)));
}
html.theme-pro.theme-dark .ai-diagram-hero:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  background:color-mix(in srgb,#1B1E23 19%,transparent);
}
html.theme-pro.theme-dark .ai-diagram-edge.ai-edge-yes:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#64D8C0;
}
html.theme-pro.theme-dark .ai-diagram-edge.ai-edge-no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  stroke:#E8A4A9;
}
html.theme-pro.theme-dark .ai-diagram-edge-label-bg.ai-edge-yes:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  fill:color-mix(in srgb,#64D8C0 8%,var(--card));
  stroke:color-mix(in srgb,#64D8C0 42%,var(--g-line));
}
html.theme-pro.theme-dark .ai-diagram-edge-label-bg.ai-edge-no:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  fill:color-mix(in srgb,#E8A4A9 8%,var(--card));
  stroke:color-mix(in srgb,#E8A4A9 42%,var(--g-line));
}
html.theme-pro.theme-dark .ai-diagram-node:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,color-mix(in srgb,var(--ai-node-tone,#281957) 7%,var(--card)),var(--card) 70%);
}
html.theme-pro.theme-dark .ai-diagram-takeaways:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,#215043 6%,var(--card));
}
html.theme-pro.theme-dark .ai-diagram-takeaways-title:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:color-mix(in srgb,#6DCFB7 86%,var(--text1));
}
html.theme-pro.theme-dark .ai-diagram-fallback:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,#573D19 8%,var(--card));
}
html.theme-pro.theme-dark .ai-hist:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  border-top-color:rgba(255,255,255,.2);
}
html.theme-pro.theme-dark .buglog-head>i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark .buglog-x:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#EE7E72;
}
html.theme-pro.theme-dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .app-brand h1:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E2E3E7;
}
html.theme-pro.theme-dark .header #searchInput:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127!important;
  border-color:#C0C8D8!important;
}
html.theme-pro.theme-dark .header #searchInput:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#C8CBD0;
}
html.theme-pro.theme-dark .header #searchInput:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:color-mix(in srgb,var(--accent) 55%,#2B2F37)!important;
  background:#1B1E23!important;
}
html.theme-pro.theme-dark .header .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.065);
}
html.theme-pro.theme-dark .link-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .link-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .link-chip:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 7%,#1B1E23);
}
html.theme-pro.theme-dark .breadcrumb button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .home-section-title:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E2E3E7;
}
html.theme-pro.theme-dark .home-section-title i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 10%,#1B1E23);
}
html.theme-pro.theme-dark .home-add-note:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .home-add-note:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .home-stack-upper.fanned .home-add-note:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 4%,#1B1E23);
}
html.theme-pro.theme-dark .home-add-icon:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .note-card:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .folder-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .note-card-name:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .folder-thumb:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .add-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px dashed #C2C9D6;
}
html.theme-pro.theme-dark .pin-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .card-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .folder-lock:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .unlock-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .emoji-badge:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.078);
}
html.theme-pro.theme-dark .tb-group:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
  border:1px solid #BDC7DB;
}
html.theme-pro.theme-dark .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.078);
}
html.theme-pro.theme-dark .font-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border:1px solid #BDC7DB;
}
html.theme-pro.theme-dark .font-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .pg-nav:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
  border:1px solid #BDC7DB;
}
html.theme-pro.theme-dark #edTitle:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark #edTitle:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border-color:color-mix(in srgb,var(--accent) 55%,#2B2F37);
}
html.theme-pro.theme-dark #fsInput:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border-color:#BDC7DB;
}
html.theme-pro.theme-dark .paper:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  outline:1px solid #C1C9D7;
}
html.theme-pro.theme-dark .add-page-zone:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1.5px dashed #C2C9D6;
  background:rgba(30,33,39,.55);
}
html.theme-pro.theme-dark .add-page-zone:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .add-page-zone.near:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 5%,#1B1E23);
}
html.theme-pro.theme-dark .side-panel:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .sp-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .sp-sec:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .more-tabs button.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .tbl-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .find-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .wf-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.96);
}
html.theme-pro.theme-dark .tbl-bar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .find-bar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .tbl-color:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.065);
}
html.theme-pro.theme-dark .select-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.96);
}
html.theme-pro.theme-dark .modal-bg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .modal-box:not(.cards-box) h3:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E2E3E7;
}
html.theme-pro.theme-dark .set-row select:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .set-row input[type=number]:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .set-row input[type=text]:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) input:not([type=range]):not([type=checkbox]):not([type=file]):not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) select:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) textarea:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border-color:#C0C8D8;
}
html.theme-pro.theme-dark .set-row select:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) input:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) select:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) textarea:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:color-mix(in srgb,var(--accent) 55%,#2B2F37);
}
html.theme-pro.theme-dark .size-preset-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .vd-ic:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.065);
}
html.theme-pro.theme-dark .ctx-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 7%,#1E2127);
}
html.theme-pro.theme-dark .notif-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.052);
}
html.theme-pro.theme-dark .mp-knob:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .mp-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.104);
}
html.theme-pro.theme-dark .mp.mp-bar .mp-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.104);
}
html.theme-pro.theme-dark .mp-buf:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark #splash .sp-title:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E2E3E7;
}
html.theme-pro.theme-dark #splash .sp-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#22262C;
}
html.theme-pro.theme-dark *:not(:where(.sdy-editor-light,.sdy-editor-light *))::-webkit-scrollbar-thumb{
  background:#2D3443;
}
html.theme-pro.theme-dark *:not(:where(.sdy-editor-light,.sdy-editor-light *))::-webkit-scrollbar-thumb:hover{
  background:#2D3443;
}
html.theme-pro.theme-dark *:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  scrollbar-color:#2D3443 transparent;
}
html.theme-pro.theme-dark input:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder,html.theme-pro.theme-dark textarea:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#C8CBD0;
}
html.theme-pro.theme-dark .pro-brand .link-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .pro-nav-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.065);
}
html.theme-pro.theme-dark .pro-fold-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.065);
}
html.theme-pro.theme-dark .pf-count:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .mp.mp-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .mp-xtra:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #mpReopen:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #mpBig:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.97)!important;
}
html.theme-pro.theme-dark #ypApp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .yp-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .yp-head .yp-ttl:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E2E3E7;
}
html.theme-pro.theme-dark .yp-head button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .yp-bgm:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.92);
}
html.theme-pro.theme-dark .yp-bgm input[type=text]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .yp-bgm input[type=text]:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#C8CBD0;
}
html.theme-pro.theme-dark .ypv-icon:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ypv-mute:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ypv-gear:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ypv-join.off:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ypv-icon:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ypv-mute:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ypv-gear:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C2C9D6;
}
html.theme-pro.theme-dark #ypApp .yp-body:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark #ypApp .yp-body:not(:where(.sdy-editor-light,.sdy-editor-light *))::-webkit-scrollbar-thumb{
  background:#2D3443;
}
html.theme-pro.theme-dark #ypApp .yp-bub:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border:1px solid #C0C8D8;
  color:#DFE1E5;
}
html.theme-pro.theme-dark #ypApp .yp-ava:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#2B3345;
}
html.theme-pro.theme-dark #ypApp .yp-sys:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#22262C;
}
html.theme-pro.theme-dark #ypApp .yp-file:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #ypApp .yp-stack:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  scrollbar-color:#2D3443 transparent;
}
html.theme-pro.theme-dark .yp-foot:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .yp-tools button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .yp-input textarea:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .yp-input textarea:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#C8CBD0;
}
html.theme-pro.theme-dark #ypReopen:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #ypReopen svg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F9A888;
}
html.theme-pro.theme-dark #proYpBtn .pro-yp-bdg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:2px solid #2B2F37;
}
html.theme-pro.theme-dark #proYpBtn .pro-yp-bdg.voice:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#50EC91;
}
html.theme-pro.theme-dark #proYpBtn .pro-yp-bdg.dm:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#571924,#571919);
}
html.theme-pro.theme-dark #ypGate:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark .ypg-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ypg-ttl:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E2E3E7;
}
html.theme-pro.theme-dark .ypg-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ypg-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:color-mix(in srgb,var(--accent) 6%,#1B1E23);
}
html.theme-pro.theme-dark .fcard-win:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23!important;
}
html.theme-pro.theme-dark .fcard-win.fcard-max .cd-face:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .cd-face:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .cd-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .otter-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .otter-bubble-mini:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ai-say:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ai-hist:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ai-askbar-field:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ai-askbar-field.multi:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ai-askbar-field:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ai-askbar-field.multi:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:rgba(255,255,255,.06)!important;
}
html.theme-pro.theme-dark .mp-eqpop:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .fc-laps:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #welcomeToast:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #musicListPop.mp-list:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark #noteGrid .note-preview:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .pro-tools .tool-btn[data-pro-label]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .pro-tools .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
  border-color:#C0C8D8;
}
html.theme-pro.theme-dark .editor-toolbar .tb-group:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
}
html.theme-pro.theme-dark .pro-bookmarks>summary:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark #proBookmarkSlot .link-chip:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .pro-bookmarks>summary>i.ri-bookmark-fill:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .pro-bookmarks>summary>i.ri-bookmark-line:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5CB47!important;
}
html.theme-pro.theme-dark .pro-bookmarks>summary>i.ri-bookmark-fill:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5CB47!important;
}
html.theme-pro.theme-dark #noteGrid .note-card-name:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#708BCC;
}
html.theme-pro.theme-dark .pro-state:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .pro-state.good .pro-state-text:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#4DEFB8;
}
html.theme-pro.theme-dark .pro-state.warn .pro-state-text:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#F5B247;
}
html.theme-pro.theme-dark .pro-state.bad .pro-state-text:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E85A5A;
}
html.theme-pro.theme-dark .page-label .page-del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#FBC0BB!important;
}
html.theme-pro.theme-dark .add-page-zone:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
}
html.theme-pro.theme-dark #musicPlayer .mp-buf:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #musicListPop .mp-li .mp-del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E17777;
}
html.theme-pro.theme-dark #musicListPop .mp-plsub .pl-rm:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E17777;
}
html.theme-pro.theme-dark #mpCtx .ci.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #mpCtx .ci.danger i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E17777;
}
html.theme-pro.theme-dark .pl-mini button.d:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E17777;
}
html.theme-pro.theme-dark #musicPlayer.mp-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid color-mix(in srgb,#2B2F37 13%,transparent)!important;
}
html.theme-pro.theme-dark #musicPlayer.mp-bar .mp-btns button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #musicPlayer.mp-bar #mpX:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #musicPlayer.mp-bar .mp-btns button.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #musicPlayer.mp-bar .mp-btns .mp-pp:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4)!important;
}
html.theme-pro.theme-dark #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen):not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:radial-gradient(115% 72%at 50% -8%,color-mix(in srgb,var(--amb2,#2B1A56) 25%,transparent),transparent 76%),radial-gradient(85% 78%at 100% 100%,color-mix(in srgb,var(--amb1,#53617d) 23%,transparent),transparent 74%),linear-gradient(150deg,color-mix(in srgb,var(--sm-surf) 80%,var(--amb1,#53617d)),var(--sm-surf) 58%,color-mix(in srgb,var(--sm-surf) 86%,var(--amb2,#2B1A56)));
}
html.theme-pro.theme-dark #mpDisc .mpdisc-disc:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:conic-gradient(from 20deg,rgba(30,33,39,.4),transparent 22%,transparent 52%,rgba(30,33,39,.4) 72%,transparent 92%,rgba(30,33,39,.4)),repeating-radial-gradient(circle at 50% 50%,rgba(30,33,39,.4)0 2.6px,rgba(30,33,39,.4) 2.6px 3.2px),radial-gradient(circle at 50% 44%,#3c4049 0%,#262930 30%,#17181d 62%,#0e0f13 100%);
}
html.theme-pro.theme-dark #mpDisc .mpdisc-hole:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark #mpDisc .mpdisc-ctl:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark #mpDisc .mpdisc-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.4);
}
html.theme-pro.theme-dark #proSide:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,var(--nf-side-a) 0%,#1E2127 50%,var(--nf-side-b) 100%);
}
html.theme-pro.theme-dark .nf-rail-tab:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#A2A6AF;
}
html.theme-pro.theme-dark .nf-folders .pro-fold-item:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-row:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#D6D9DE;
}
html.theme-pro.theme-dark .nf-folders .pro-fold-item>i:first-child:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-row>i:first-child:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C1C4CB;
}
html.theme-pro.theme-dark .nf-folders .pro-fold-item .nf-chev:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-bookmarks>summary:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#D6D9DE;
}
html.theme-pro.theme-dark .nf-bookmarks>summary>i:first-child:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C1C4CB;
}
html.theme-pro.theme-dark .nf-bookmarks>summary .nf-chev:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-vault-slot .vault-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C1C4CB;
}
html.theme-pro.theme-dark .nf-vault-slot .vault-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .nf-server-top:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-server-track:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .nf-server-fill:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(90deg,#1A5056 0%,#1A5636 100%);
}
html.theme-pro.theme-dark .nf-topbar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(30,33,39,.9);
}
html.theme-pro.theme-dark .nf-search-slot .search-wrap>i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-search-slot #searchInput:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid #2B2F37!important;
  background:#1B1E23!important;
  color:#D6D8DD;
}
html.theme-pro.theme-dark .nf-search-slot #searchInput:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-search-slot #searchInput:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#B8AAEE!important;
}
html.theme-pro.theme-dark .nf-offline-slot .offline-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#574B19;
  color:#EE8B4E;
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid #2B2F37;
  background:#1B1E23;
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C2BEDA;
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid #2B2F37;
  background:#1B1E23;
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C2BEDA;
}
html.theme-pro.theme-dark .nf-page-tools .home-view-toggle:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid #2B2F37;
  background:#1B1E23;
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .home-sort-pop:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .home-sort-pop .hsort-item i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark #noteGrid.nf-grid .note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #nfPinned .note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C0B7E1;
}
html.theme-pro.theme-dark #noteGrid.nf-grid .note-card.selected:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #nfPinned .note-card.selected:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:var(--accent,#5975ED);
}
html.theme-pro.theme-dark .nf-card .emoji-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:var(--dot,#231957);
}
html.theme-pro.theme-dark .nf-card .emoji-badge.has-emoji:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:var(--dot,#231957);
}
html.theme-pro.theme-dark .nf-card .nf-pin:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-card .nf-lock:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-card .nf-lock:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-card .note-menu-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-card .select-check:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border:1.5px solid #31363F;
}
html.theme-pro.theme-dark #noteGrid.nf-grid .folder-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C0B7E1;
}
html.theme-pro.theme-dark #noteGrid.nf-grid .folder-card .folder-menu-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-card .emoji-picker:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .nf-bm-panel .link-chip:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .nf-widget:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .nf-widget-more:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-widget-more:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .nf-now-art:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-now-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#D6D9DE;
}
html.theme-pro.theme-dark .nf-now-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .nf-now-play:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,#281957,#271957);
}
html.theme-pro.theme-dark .nf-now-prog:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .nf-now-prog i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#241957;
}
html.theme-pro.theme-dark .nf-now-prog:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  background:#241957;
}
html.theme-pro.theme-dark .nf-flash-sub button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C6C9CF;
}
html.theme-pro.theme-dark .nf-flash-sub button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark .nf-flash-q:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border:1px solid #2B2F37;
}
html.theme-pro.theme-dark .nf-chat-line.other .nf-chat-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border:1px solid #2B2F37;
}
html.theme-pro.theme-dark .nf-chat-line.me .nf-chat-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;
}
html.theme-pro.theme-dark #breadcrumb button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid #2B2F37;
  background:#1B1E23;
}
html.theme-pro.theme-dark #breadcrumb button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C2BEDA;
}
html.theme-pro.theme-dark .pro-results:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .home-ai-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
}
html.theme-pro.theme-dark .ctx-item.danger:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ctx-item.danger i:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E85A5A;
}
html.theme-pro.theme-dark .ctx-key:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .select-bar button:nth-of-type(3):not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#571919,#571919)!important;
}
html.theme-pro.theme-dark #liftGhost:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#281957 55%,#271E52)!important;
}
.editor-toolbar .tool-btn.active:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .editor-toolbar .tool-btn.active:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#1B1E23 12%),var(--accent))!important;
  border-color:color-mix(in srgb,var(--accent) 78%,#38569E 22%)!important;
}
.editor-toolbar .tb-labeled.accent:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .editor-toolbar .tb-labeled.accent:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#192B57,#192C57)!important;
}
.editor-toolbar .tb-labeled.accent:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .editor-toolbar .tb-labeled.accent:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#192B57,#192C57)!important;
}
html.theme-pro.theme-dark #ypApp .yp-head .yp-ttl svg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#1E2127,#1E2127);
}
html.theme-pro.theme-dark #ypApp .ypv-icon.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#572719,#571920)!important;
}
html.theme-pro.theme-dark #ypApp .ypv-mute.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571D19!important;
}
html.theme-pro.theme-dark #ypApp .yp-vchip .st.ok:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#79C3A7!important;
}
html.theme-pro.theme-dark #ypApp .yp-line.me .yp-bub:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191A57,#2A1A56)!important;
}
html.theme-pro.theme-dark #ypApp .yp-del:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#571D19!important;
}
html.theme-pro.theme-dark #ypApp .yp-send:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#191A57,#2B1A56)!important;
}
html.theme-pro.theme-dark #ypApp .ypfr-btn.main:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #ypApp .ypfr-add button:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #ypApp .ypfr-login button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#191A57,#2B1A56)!important;
}
html.theme-pro.theme-dark #ypApp .ypfr-btn.ghost:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#E59D9A!important;
}
html.theme-pro.theme-dark #homePdfDropOverlay:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.16);
}
html.theme-pro.theme-dark #homePdfDropOverlay .home-pdf-drop-icon:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#1E2127,#22262C);
  color:#F09D9D;
}
html.theme-pro.theme-dark #homePdfDropOverlay .home-pdf-drop-card em:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  color:#9695D6;
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C5C0D8;
  background:linear-gradient(145deg,#1B1E23,#1B1E23);
  color:#B9AEF1;
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  border-color:#BAB0E8;
  color:#9789D4;
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:1px solid #C7C0D8;
  background:linear-gradient(145deg,#1B1E23,#1B1E23);
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#1B1E23,var(--hs-sort-tint));
}
html.theme-pro.theme-dark .nf-page-tools .home-view-toggle:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C5C0D8;
  background:linear-gradient(145deg,#1B1E23,#1B1E23);
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1B1E23;
  color:#9A95B8;
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#1E2127,#1B1E23);
  color:#9789D4;
}
html.theme-pro.theme-dark.theme-dark .nf-page-tools .hvt-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark #noteGrid.nf-grid>.note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #nfPinned>.note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #noteGrid.nf-grid>.folder-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#C1B6E2;
}
html.theme-pro.theme-dark .nf-card .ncn-title:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#DFE1E5;
}
html.theme-pro.theme-dark .nf-card .ncm-date:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-card .note-menu-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-card .nf-pin:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-card .nf-lock:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark .nf-widget-more:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-flash-sub button:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:#C8CBD0;
}
html.theme-pro.theme-dark #editorView .editor-toolbar .tb-group .tool-btn.active:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#1B1E23 12%),var(--accent))!important;
}
/* 24.0-dark-auto END */
/* 24.0-dark-core — scripts/dark-core.css + 에디터 경계 가드 (자동 규칙보다 뒤 = 우선) */
/* ══════════════════════════════════════════════════════════════════════
   24.0 · 다크 테마 — NoteFlow 다크 팔레트 (사용자 지정 기본 테마)

   라이트 '워크' 화면(완성형)에 색만 입힌다. 여기(core)에는 토큰과
   '기계적으로 뒤집으면 안 되는 것'만 손으로 쓴다 —
     · 표면·잉크·헤어라인 토큰(라이트 값 위에 덮는다)
     · 종이(노트)는 언제나 흰색 — 뒤집으면 문서가 아니게 된다
     · 로고(워드마크)는 밝은 글자로 반전, 아이콘은 원래 색 유지
     · 태그 알약은 노트 색 틴트로 다시 계산(라이트 파스텔 배경 금지)
     · 스크롤바·선택 원·hover 막
   나머지 1300여 규칙은 scripts/dark-theme.mjs 가 라이트 CSS 색을 뒤집어
   자동으로 만든다. 팔레트를 바꾸려면 이 파일의 토큰만 고치면 된다.

   기준: 리포 최상단 다크 목업(Max_a_이_화면_다크모드_버전도_만들어봐..png)
     · 본문 배경 #14161A · 카드 #191C21 · 사이드바 #1B1E23→#16181C
     · 상단줄 #14161A(불투명 90%) · 검색 알약 #1C1E22 · 레일 #15171B
     · 잉크 #ECEDF1 / #C0C3CB / #8C9099 · 헤어라인 #262A31
     · 포인트 보라 #8B7AE8 (New Note 알약은 #6F5FC9→#8B7AE8 계열)
   ══════════════════════════════════════════════════════════════════════ */

html.theme-pro.theme-dark{
  color-scheme:dark;

  /* ── 14.48 워크 토큰 ── */
  --bg:#14161A;--bg2:#1E2127;--card:#191C21;
  --text1:#ECEDF1;--text2:#B7BAC2;--text3:#8C9099;
  --border:#2B2F37;
  --accent:#8B7AE8;--accent2:#6F5CC4;
  --shadow:0 1px 2px rgba(0,0,0,.55);
  --shadow-lg:0 20px 44px -14px rgba(0,0,0,.66);
  --line:#2B2F37;--dot:#4A505A;
  --grad:linear-gradient(135deg,#8B7AE8,#6F5CC4);
  --g-blur:14px;--g-blur-lg:20px;
  --g-fill:rgba(28,31,37,.82);
  --g-fill-strong:rgba(26,29,35,.95);
  --g-in:rgba(255,255,255,.06);
  --g-brd:rgba(255,255,255,.10);
  --g-line:rgba(255,255,255,.09);
  --g-hi:inset 0 1px 0 rgba(255,255,255,.05);
  --g-shadow:0 1px 2px rgba(0,0,0,.5),0 14px 34px -14px rgba(0,0,0,.62);
  --g-shadow-lg:0 2px 8px rgba(0,0,0,.5),0 30px 70px -24px rgba(0,0,0,.72);
  --pro-ring:0 0 0 1px color-mix(in srgb,var(--accent) 34%,transparent),
             0 10px 28px -10px color-mix(in srgb,var(--accent) 42%,transparent);
  --logo-paper:#14161A;
  --editor-canvas:rgba(13,14,18,1);
  --paper-shadow:0 1px 3px rgba(0,0,0,.6),0 14px 34px -8px rgba(0,0,0,.72);

  /* ── 22.0 NoteFlow 토큰 ── */
  --nf-ink:#ECEDF1;
  --nf-ink2:#C0C3CB;
  --nf-sub:#8C9099;
  --nf-faint:#6E727B;
  --nf-line:#262A31;
  --nf-hair:#20242A;
  --nf-card:#191C21;
  --nf-page:#14161A;
  --nf-side-a:#1B1E23;
  --nf-side-b:#16181C;
  --nf-rail:#15171B;
  --nf-field:#1E2127;
  --nf-hover:rgba(255,255,255,.06);
  --nf-on:rgba(139,122,232,.20);
  --nf-violet:#8B7AE8;
  --nf-violet-hi:#8B7AE8;
  --nf-violet-lo:#6F5CC4;
  --nf-violet-ink:#B4A4EE;
  --nf-violet-soft:rgba(139,122,232,.16);
  --nf-teal-hi:#7FBDC9;
  --nf-teal-lo:#5EA4B5;
  --nf-red:#F4614B;
  --notif-dot:#FFEE00;
  --notif-dot-ink:#18181B;
  --nf-sh-card:0 1px 2px rgba(0,0,0,.55),0 10px 24px -18px rgba(0,0,0,.75);
  --nf-sh-card-h:0 2px 6px rgba(0,0,0,.6),0 18px 34px -20px rgba(0,0,0,.85);

  /* ── One UI 공용 크롬(메뉴·시트·팝오버) ── */
  --oui-acc:#8B7AE8;--oui-acc-hi:#A893E8;--oui-acc-ink:#FFFFFF;
  --oui-acc-soft:rgba(139,122,232,.18);--oui-acc-line:rgba(139,122,232,.42);
  --oui-page:#14161A;--oui-surf:#191C21;--oui-surf2:#22262C;--oui-surf3:#2A2F37;
  --oui-t1:#ECEDF1;--oui-t2:#B7BAC2;--oui-t3:#8C9099;
  --oui-line:#262A31;
  --oui-shadow:0 1px 2px rgba(0,0,0,.5),0 10px 24px -16px rgba(0,0,0,.66);
  --oui-shadow-lg:0 2px 6px rgba(0,0,0,.55),0 18px 40px -20px rgba(0,0,0,.8);
  --oui-grad-acc:linear-gradient(135deg,#8B7AE8 0%,#7A66DC 55%,#6F5CC4 100%);

  /* ── 옛 부품 토큰(에디터 바·메뉴·팝오버) ── */
  --edbar-fill:rgba(255,255,255,.07);
  --mnu-fill:#22262C;
  --sm-line:rgba(255,255,255,.08);
  --sm-shadow:0 12px 34px rgba(0,0,0,.6),0 2px 10px rgba(0,0,0,.4);
  --sm-mini-color:var(--sm-minicolor,#8B7AE8);
}

/* ── 바탕 ───────────────────────────────────────────────────────────── */
html.theme-pro.theme-dark body:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-page);color:var(--nf-ink);}
html.theme-pro.theme-dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-page);}
html.theme-pro.theme-dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *))::before,html.theme-pro.theme-dark #sdyAmbient:not(:where(.sdy-editor-light,.sdy-editor-light *))::after,html.theme-pro.theme-dark #sdyAmbient .ga:not(:where(.sdy-editor-light,.sdy-editor-light *)){display:none;}
html.theme-pro.theme-dark #wallLayer:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{background:#000;}

/* ── 사이드바 ───────────────────────────────────────────────────────── */
html.theme-pro.theme-dark #proSide:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,var(--nf-side-a) 0%,#181B20 50%,var(--nf-side-b) 100%);
  border-right:1px solid var(--nf-hair);
  box-shadow:none;
}
html.theme-pro.theme-dark .nf-brand .pf-name:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #proSide .pf-name:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ink);}
html.theme-pro.theme-dark .nf-folders .pro-fold-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-row:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-hover);}
html.theme-pro.theme-dark .nf-folders .pro-fold-item.on:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .pro-fold-item.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-on);color:var(--nf-ink);}
html.theme-pro.theme-dark .nf-new:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(180deg,#8B7AE8 0%,#6F5FC9 100%);
  box-shadow:0 8px 18px -8px rgba(0,0,0,.65);
}
html.theme-pro.theme-dark .nf-new:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){filter:brightness(1.06);}

/* ── 상단줄 · 검색 ──────────────────────────────────────────────────── */
html.theme-pro.theme-dark .nf-topbar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(20,22,26,.90);
  border-bottom:1px solid var(--nf-hair);
}
html.theme-pro.theme-dark .nf-search-slot #searchInput:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1C1E22!important;
  border-color:#2B2F37!important;
  color:var(--nf-ink);
}
html.theme-pro.theme-dark .nf-search-slot #searchInput:not(:where(.sdy-editor-light,.sdy-editor-light *))::placeholder{color:#71757E;}
html.theme-pro.theme-dark .nf-search-slot #searchInput:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:rgba(139,122,232,.55)!important;
  box-shadow:0 0 0 3px rgba(139,122,232,.16)!important;
}
html.theme-pro.theme-dark .nf-search-slot .search-wrap>i:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#71757E;}
html.theme-pro.theme-dark .nf-clock:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ink2);}
html.theme-pro.theme-dark .nf-clock:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-hover);}
html.theme-pro.theme-dark .nf-btn-slot .tool-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ink2);}
html.theme-pro.theme-dark .nf-btn-slot .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-hover);}
html.theme-pro.theme-dark .nf-offline-slot .offline-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#3A2F12;color:#F0C36A;}
html.theme-pro.theme-dark .app-brand h1 .brand-wordmark:not(:where(.sdy-editor-light,.sdy-editor-light *)){filter:brightness(0) invert(1);}
html.theme-pro.theme-dark .app-brand .logo-dot:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:transparent;box-shadow:none;}
html.theme-pro.theme-dark #splash:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-page);}
html.theme-pro.theme-dark #splash .sp-title .brand-wordmark:not(:where(.sdy-editor-light,.sdy-editor-light *)){filter:brightness(0) invert(1);}
html.theme-pro.theme-dark #splash .sp-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#262A31;}

/* ── 본문 머리줄 · 카드 ─────────────────────────────────────────────── */
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .home-sort-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .home-view-toggle:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;border-color:#2B2F37;color:var(--nf-sub);box-shadow:none;
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .home-sort-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#242830;border-color:#353A44;color:var(--nf-ink);}
html.theme-pro.theme-dark .home-view-toggle .hvt-btn.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#2A2F37;color:var(--nf-ink);}
html.theme-pro.theme-dark .nf-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #nfPinned .note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#333845;box-shadow:var(--nf-sh-card-h);
}
html.theme-pro.theme-dark .nf-card .nf-pin:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-card .nf-lock:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#7C818B;}
html.theme-pro.theme-dark .nf-card .note-menu-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#7C818B;}
html.theme-pro.theme-dark .nf-card .note-menu-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-violet-ink);background:var(--nf-hover);}
html.theme-pro.theme-dark .nf-card .emoji-badge:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--dot,#8B7AE8);}
/* 태그 알약 — 라이트 파스텔(--tag-bg) 대신 노트 색 틴트로 다시 계산 */
html.theme-pro.theme-dark .nf-card .nf-tag:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  color:color-mix(in srgb,var(--dot,#8B7AE8) 62%,#FFFFFF);
  background:color-mix(in srgb,var(--dot,#8B7AE8) 20%,transparent);
}
html.theme-pro.theme-dark .nf-card .select-check:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;border-color:#3A4049;
}
html.theme-pro.theme-dark .nf-card.selected:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:#6380FF;box-shadow:0 0 0 3px #6380FF,0 0 0 6px rgba(99,128,255,.32),var(--nf-sh-card);}
html.theme-pro.theme-dark .nf-empty i:not(:where(.sdy-editor-light,.sdy-editor-light *)){opacity:.4;}

/* ── 레일 위젯 · 논문 띠 ────────────────────────────────────────────── */
html.theme-pro.theme-dark .nf-widget:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-card);border-color:var(--nf-line);}
html.theme-pro.theme-dark .nf-widget-more:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#7C818B;}
html.theme-pro.theme-dark .nf-widget-more:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-hover);color:var(--nf-violet-ink);}
html.theme-pro.theme-dark .nf-now-art:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#22262C;color:#7C818B;}
/* home-now-progress:BEGIN
   홈 음악 미리보기 전용: 회색 트랙/밝은 보라 진행/흰 손잡이를 분리한다.
   원본 #mpProg/#mpBProg 및 공용 음악·강조색 토큰은 변경하지 않는다. */
html.theme-pro.theme-dark #nfRail #nfNowProg:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#626878;}
html.theme-pro.theme-dark #nfRail #nfNowProg>#nfNowFill:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#D0C2FF;}
html.theme-pro.theme-dark #nfRail #nfNowProg:not(:where(.sdy-editor-light,.sdy-editor-light *))::after{
  background:#F5F0FF;box-shadow:0 0 0 2px var(--nf-card);
}
/* home-now-progress:END */
html.theme-pro.theme-dark .nf-chat-input input:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1E2127;border-color:#2B2F37;color:var(--nf-ink);}
html.theme-pro.theme-dark .paper-ticker:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#17191E;border-color:var(--nf-hair);}

/* ── 종이(노트)는 언제나 흰색 — 문서 느낌 유지 ──────────────────────── */
html.theme-pro.theme-dark .paper:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#FFFFFF;
  outline-color:#3A4049;
  box-shadow:0 2px 6px rgba(0,0,0,.5),0 18px 44px -12px rgba(0,0,0,.6)!important;
}
html.theme-pro.theme-dark .paper.focused:not(:where(.sdy-editor-light,.sdy-editor-light *)){outline-color:var(--accent);}
html.theme-pro.theme-dark .page-label:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#8C9099;}
html.theme-pro.theme-dark .add-page-zone:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#3A4049;color:#8C9099;background:rgba(255,255,255,.03);
}
html.theme-pro.theme-dark .note-preview-frame:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .paper-img.math:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .present img:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#FFFFFF;}
html.theme-pro.theme-dark .editor-body:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--editor-canvas)!important;}
html.theme-pro.theme-dark .size-preset-thumb:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#FFFFFF;border-color:#4A505A;}

/* ── 에디터 크롬 ────────────────────────────────────────────────────── */
html.theme-pro.theme-dark #edTitle:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#20242A;}
html.theme-pro.theme-dark #edTitle:focus:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1E2127;}
html.theme-pro.theme-dark #fsInput:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .font-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1E2127;border-color:#2B2F37;color:var(--nf-ink);}
html.theme-pro.theme-dark .font-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#242830;}
html.theme-pro.theme-dark .pg-nav:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1E2127;border-color:#2B2F37;}
html.theme-pro.theme-dark .side-panel:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#191C21;border-right-color:var(--nf-line);}
html.theme-pro.theme-dark .sp-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .sp-sec:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-hover);}
html.theme-pro.theme-dark .more-tabs button.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#2A2F37;color:var(--nf-ink);}
html.theme-pro.theme-dark .tbl-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .find-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .wf-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .select-bar:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(28,31,37,.97);border-color:var(--border);color:var(--nf-ink);
}
html.theme-pro.theme-dark .tbl-bar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .find-bar button:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .tbl-color:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.07);color:var(--nf-ink);}
html.theme-pro.theme-dark .editor-toolbar:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:transparent;}
html.theme-pro.theme-dark .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .side-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.07);}

/* ── 모달 · 메뉴 · 팝오버 ───────────────────────────────────────────── */
html.theme-pro.theme-dark .modal-bg:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(6,7,9,.62);}
html.theme-pro.theme-dark .modal-box:not(.cards-box):not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:var(--oui-surf);border:1px solid var(--oui-line);
  box-shadow:0 2px 8px rgba(0,0,0,.5),0 28px 70px -18px rgba(0,0,0,.75)!important;
}
html.theme-pro.theme-dark .modal-box:not(.cards-box) h3:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ink);}
html.theme-pro.theme-dark .set-row select:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .set-row input[type=number]:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .set-row input[type=text]:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) input:not([type=range]):not([type=checkbox]):not([type=file]):not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) select:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .modal-box:not(.cards-box) textarea:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1E2127;border-color:#2B2F37;color:var(--nf-ink);
}
html.theme-pro.theme-dark .ctx-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ctx-menu.show:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#1C2026;border-color:#2B2F37;color:var(--nf-ink);
  box-shadow:0 18px 44px -14px rgba(0,0,0,.8);
}
html.theme-pro.theme-dark .ctx-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.07);}
html.theme-pro.theme-dark .ctx-sep:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#2B2F37;}
html.theme-pro.theme-dark .notif-pop:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .srv-pop:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1C2026;border-color:#2B2F37;color:var(--nf-ink);}
html.theme-pro.theme-dark .notif-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.07);}
html.theme-pro.theme-dark .notif-head button:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#22262C;color:var(--nf-sub);}
html.theme-pro.theme-dark .home-sort-pop:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1C2026;border-color:#2B2F37;}
html.theme-pro.theme-dark .hsort-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.07);}
html.theme-pro.theme-dark .emoji-picker:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .card-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1C2026;border-color:#2B2F37;color:var(--nf-ink2);}
html.theme-pro.theme-dark .emoji-opt:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.08);}
html.theme-pro.theme-dark .toast:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#22262C;color:var(--nf-ink);box-shadow:0 12px 30px rgba(0,0,0,.6);}
html.theme-pro.theme-dark .fcolor-dot:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(255,255,255,.08);}
html.theme-pro.theme-dark .home-ai-card:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-card);border-color:var(--nf-line);}
html.theme-pro.theme-dark .home-ai-mini:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-hover);}

/* ── 카드 창 · 플래시카드 · 해달이 말풍선 ───────────────────────────── */
html.theme-pro.theme-dark .cards-box:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .fcard-win:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#191C21!important;color:var(--nf-ink);
  border-color:#2B2F37;
  box-shadow:0 24px 60px -18px rgba(0,0,0,.85)!important;
}
html.theme-pro.theme-dark .fcard-head:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1E2127;border-bottom-color:#2B2F37;}
html.theme-pro.theme-dark .cd-hero:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-deck:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-face:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-qq:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-reveal:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-opt:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-stat:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-tile:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .fc-mode:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .ex-item:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .cd-back:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:rgba(255,255,255,.05)!important;border-color:#2B2F37!important;
}
html.theme-pro.theme-dark .otter-bubble:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#22262C;color:var(--nf-ink);}
html.theme-pro.theme-dark .om-say:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#22262C;color:var(--nf-ink);}

/* ── 스크롤바 ───────────────────────────────────────────────────────── */
html.theme-pro.theme-dark *:not(:where(.sdy-editor-light,.sdy-editor-light *)){scrollbar-color:#3A4049 transparent;}
html.theme-pro.theme-dark :not(:where(.sdy-editor-light,.sdy-editor-light *))::-webkit-scrollbar-thumb{background:#3A4049;}
html.theme-pro.theme-dark :not(:where(.sdy-editor-light,.sdy-editor-light *))::-webkit-scrollbar-thumb:hover{background:#4A505A;}

/* ── 설정의 다크 스위치 ────────────────────────────────────────── */
html.theme-pro.theme-dark .sdy-switch:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#23262C;border-color:#33383F;}
html.theme-pro.theme-dark .sdy-switch i:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#C9CCD3;}
html.theme-pro.theme-dark .sdy-switch.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:var(--nf-violet);border-color:var(--nf-violet);}
html.theme-pro.theme-dark .sdy-switch.on i:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#fff;}

/* ── 휴지통·관리자·기타 잔손질 ──────────────────────────────────────── */
html.theme-pro.theme-dark .trash-item:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#1E2127;border-color:#2B2F37;}
html.theme-pro.theme-dark .trash-item:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#242830;}
html.theme-pro.theme-dark .text-ghost .tg-corner:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#2A2F37;}

/* ── 26.0 · 홈 다듬기 — 다크 쪽 손질 ─────────────────────────────────
   라이트 26.0 블록은 '투명 바탕 아이콘 단추'라 생성기가 색을 뒤집어도
   hover 판·세그먼트 트랙·선택 칩이 어긋난다. 값만 여기서 다시 준다. */
html.theme-pro.theme-dark{
  --nf-track:#232730;
  --nf-ctl-ink:#9AA0AC;
  --nf-ctl-ink-on:#ECEDF1;
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-page-tools .home-sort-btn[data-sort]:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:transparent;
  background:transparent;
  box-shadow:none;
  color:var(--nf-ctl-ink);
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-page-tools .home-sort-btn[data-sort]:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:transparent;
  background:var(--nf-hover);
  box-shadow:none;
  color:var(--nf-ctl-ink-on);
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu>i:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-page-tools .home-sort-btn>i:first-child:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:none;color:inherit;
}
html.theme-pro.theme-dark .nf-page-tools .home-view-toggle:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border:0;background:var(--nf-track);box-shadow:none;
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ctl-ink);}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:transparent;color:var(--nf-ctl-ink-on);}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#30353F;color:var(--nf-ctl-ink-on);box-shadow:0 1px 3px rgba(0,0,0,.35);
}
html.theme-pro.theme-dark #noteGrid.nf-grid>.note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #nfPinned>.note-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark #noteGrid.nf-grid>.folder-card:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#343A46;
}
html.theme-pro.theme-dark .nf-topbar .nf-btn-slot:not(.nf-avatar-slot) .tool-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-topbar .nf-menu-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ctl-ink);}
html.theme-pro.theme-dark .nf-topbar .nf-btn-slot:not(.nf-avatar-slot) .tool-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.theme-pro.theme-dark .nf-topbar .nf-menu-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--nf-ctl-ink-on);}
/* 에디터 전용 라이트 토큰 — 기존 라이트 CSS에서 추출(직접 수정 금지). */
html.theme-pro .sdy-editor-light{
  --bg:#F4F5F8;
  --bg2:#ECEEF3;
  --card:#FFFFFF;
  --text1:#0F172A;
  --text2:#334155;
  --text3:#64748B;
  --logo-paper:#FFFFFF;
  --border:#CBD5E1;
  --accent:var(--sdy-editor-accent,#4f6ef7);
  --accent2:var(--sdy-editor-accent2,#415acb);
  --shadow:0 1px 2px rgba(23,28,41,.06);
  --line:#CBD5E1;
  --dot:#94A3B8;
  --editor-canvas:rgba(40,40,40,1);
  --paper-shadow:0 1px 3px rgba(23,28,41,.10),0 12px 32px -8px rgba(23,28,41,.18);
  --notif-dot:#FFEE00;
  --notif-dot-ink:#18181B;
  --grad:linear-gradient(135deg,#14366E,#0F2A5A);
  --shadow-lg:0 16px 40px -12px rgba(23,28,41,.20);
  --g-fill:rgba(255,255,255,.80);
  --g-fill-strong:rgba(255,255,255,.94);
  --g-in:rgba(23,28,41,.05);
  --g-brd:rgba(23,28,41,.12);
  --g-line:rgba(23,28,41,.09);
  --g-hi:inset 0 1px 0 rgba(255,255,255,.95);
  --g-shadow:0 1px 2px rgba(23,28,41,.07),0 14px 34px -14px rgba(23,28,41,.16);
  --g-shadow-lg:0 2px 8px rgba(23,28,41,.09),0 30px 70px -24px rgba(23,28,41,.26);
  --pro-ring:0 0 0 1px color-mix(in srgb,var(--accent) 30%,transparent),
             0 10px 28px -10px color-mix(in srgb,var(--accent) 32%,transparent);
  --edbar-bg:rgba(18,18,18,.98);
  --edbar-line:rgba(255,255,255,.17);
  --edbar-ink:#F7F5F1;
  --edbar-ink3:#C4C1BB;
  --edbar-fill:rgba(255,255,255,.12);
  --edbar-fill2:rgba(255,255,255,.21);
  --ed-pebble-bg:linear-gradient(180deg,rgba(255,255,255,.95) 0%,rgba(244,246,250,.91) 100%);
  --ed-pebble-bg-hover:linear-gradient(180deg,#FFFFFF 0%,#F8FAFC 100%);
  --ed-pebble-bg-focus:linear-gradient(180deg,#FFFFFF 0%,#F1F5F9 100%);
  --ed-pebble-border:rgba(15,23,42,.11);
  --ed-pebble-border-hover:rgba(15,23,42,.20);
  --ed-pebble-ink:#1F2937;
  --ed-pebble-ink-strong:#0F172A;
  --ed-pebble-ink3:#64748B;
  --ed-pebble-subtle:rgba(15,23,42,.06);
  --ed-pebble-sep:rgba(15,23,42,.10);
  --ed-pebble-shadow:0 5px 14px -3px rgba(15,23,42,.20),0 2px 4px rgba(15,23,42,.08),inset 0 1px 0 rgba(255,255,255,.94);
  --ed-pebble-shadow-hover:0 8px 18px -4px rgba(15,23,42,.26),0 3px 6px rgba(15,23,42,.10),inset 0 1px 0 #FFFFFF;
  --ed-pebble-fmt-hover:linear-gradient(180deg,#F5F8FF 0%,#EAF0FF 100%);
  --ed-pebble-fmt-ink:#2B57D0;
  --ed-pebble-insert-ink:#7C3F28;
  --ed-pebble-insert-hover:linear-gradient(180deg,#FFF7F3 0%,#FFECE3 100%);
  --ed-pebble-insert-hover-ink:#B5471F;
  --ed-pebble-draw-ink:#166556;
  --ed-pebble-draw-hover:linear-gradient(180deg,#F2FCF9 0%,#E2F7F0 100%);
  --ed-pebble-draw-hover-ink:#0F766E;
  --ed-pebble-find-ink:#4F3D96;
  --ed-pebble-find-hover:linear-gradient(180deg,#F8F5FF 0%,#EEE8FF 100%);
  --ed-pebble-find-hover-ink:#5B3FD1;
  --qm-scrim:rgba(8,10,14,.50);
  --qm-bg:rgba(27,28,32,.97);
  --qm-section:#24262B;
  --qm-tile:#2D3037;
  --qm-tile-hover:#363A43;
  --qm-icon-bg:#393D47;
  --qm-border:rgba(255,255,255,.10);
  --qm-border-strong:rgba(255,255,255,.16);
  --qm-divider:rgba(255,255,255,.08);
  --qm-ink:#F3F4F6;
  --qm-ink2:#D6DAE2;
  --qm-ink3:#969DAA;
  --qm-accent:#82A4FF;
  --qm-fav-bg:rgba(245,158,11,.15);
  --qm-fav-border:rgba(251,191,36,.42);
  --qm-fav-icon-bg:rgba(245,158,11,.22);
  --qm-fav-ink:#FBBF24;
  --qm-on-icon-bg:rgba(52,199,89,.20);
  --qm-on-icon-ink:#4ADE80;
  --qm-switch-off:#454954;
  --qm-switch-on:#34C759;
  --qm-knob:#FFFFFF;
  --qm-white-swatch:#FFFFFF;
  --qm-shadow:0 24px 64px rgba(0,0,0,.58),0 4px 14px rgba(0,0,0,.34),inset 0 1px 0 rgba(255,255,255,.07);
  --canvas-ink:rgba(255,255,255,.86);
  --canvas-ink3:rgba(255,255,255,.62);
  --canvas-line:rgba(255,255,255,.30);
  --nf-ink:#1C1C28;
  --nf-ink2:#4B5563;
  --nf-sub:#8F90A0;
  --nf-faint:#A0A1AD;
  --nf-line:#EDEEF3;
  --nf-hair:#F0F0F4;
  --nf-card:#FFFFFF;
  --nf-page:#FCFCFD;
  --nf-side-a:#FAF9F9;
  --nf-side-b:#F3F4F6;
  --nf-rail:#FBFAFA;
  --nf-field:#F5F5F8;
  --nf-hover:#F1F0F7;
  --nf-on:#ECEAF8;
  --nf-violet:#8B7AE8;
  --nf-violet-hi:#B8A4EC;
  --nf-violet-lo:#8A78DC;
  --nf-violet-ink:#6F5CC4;
  --nf-violet-soft:#F1EEFC;
  --nf-teal-hi:#8FC7D2;
  --nf-teal-lo:#6FB0C1;
  --nf-red:#F4614B;
  --nf-r-card:16px;
  --nf-r-w:16px;
  --nf-r-row:9px;
  --nf-sh-card:0 1px 2px rgba(16,24,40,.04),0 10px 24px -16px rgba(16,24,40,.14);
  --nf-sh-card-h:0 2px 4px rgba(16,24,40,.05),0 16px 32px -18px rgba(16,24,40,.20);
  --oui-acc:#8B7AE8;
  --oui-acc-hi:#A893E8;
  --oui-acc-ink:#FFFFFF;
  --oui-acc-soft:rgba(139,122,232,.12);
  --oui-acc-line:rgba(139,122,232,.34);
  --oui-page:#FCFCFD;
  --oui-surf:#FFFFFF;
  --oui-surf2:#F5F5F8;
  --oui-surf3:#ECECF2;
  --oui-t1:#1C1C28;
  --oui-t2:#4B5563;
  --oui-t3:#8F90A0;
  --oui-line:#EDEEF3;
  --oui-r-sheet:20px;
  --oui-r-pop:16px;
  --oui-r-card:16px;
  --oui-r-item:10px;
  --oui-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 24px -16px rgba(16,24,40,.14);
  --oui-shadow-lg:0 2px 4px rgba(16,24,40,.05),0 18px 40px -20px rgba(16,24,40,.22);
  --oui-grad-acc:linear-gradient(135deg,#A893E8 0%,#8B7AE8 55%,#6F5CC4 100%);
  --nf-ctl:34px;
  --nf-ctl-r:10px;
  --nf-ctl-ink:#8E93A0;
  --nf-ctl-ink-on:#1C1C28;
  --nf-track:#F2F1F6;
  --nf-ease:cubic-bezier(.22,.8,.32,1);
  color-scheme:light;
}
:where(.sdy-editor-light){color:var(--text1);}
:where(#editorView .sdy-editor-light){color:inherit;}
/* ══ 24.0 · DARK END ══ */
/* ══ 15.27 · 편집기 툴바 폭 — 화면에 맞춰 도구 크기만 줄인다 ═══════════════
   도구 묶음(가운데)이 양옆(제목·액션)보다 넓어 서로 겹치던 문제를 고친다.
   바 색·단추 모양·순서는 그대로 두고, 폭이 좁아지면 단추·글꼴칸·간격만
   단계적으로 줄인다(숨는 것은 넓은 화면에서 덜 쓰는 것부터).
   그래도 모자라면 도구 칸 안에서만 가로로 스크롤된다 — 겹치지는 않는다. */
@media(min-width:1025px){
  /* 양옆(제목·액션)은 자기 만큼만 차지하고, 남는 자리를 도구 칸이 갖는다.
     (예전엔 양옆이 1fr 이라 액션 묶음이 제 자리보다 넓어 도구 칸을 덮었다) */
  .editor .editor-toolbar,html.theme-pro .editor .editor-toolbar{
    display:grid!important;grid-template-columns:auto minmax(0,1fr) auto!important;
    overflow-x:auto!important;overflow-y:hidden!important;scrollbar-width:none;
  }
  .editor .editor-toolbar::-webkit-scrollbar{display:none;}
  /* 가운데 묶음은 한 줄을 지킨다(줄바꿈하면 바가 두 줄로 늘어난다). */
  .editor .editor-toolbar .tb-mid,html.theme-pro .editor .editor-toolbar .tb-mid{flex-wrap:nowrap!important;}
  .editor .editor-toolbar .tb-mid{
    min-width:0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;
    justify-content:center;justify-content:safe center;
    padding:2px 4px 8px;margin:-2px -4px -8px;
  }
  .editor .editor-toolbar .tb-mid::-webkit-scrollbar{display:none;}
  /* ── 1단계 · 기본 데스크톱: 40 → 36 ── */
  .editor .editor-toolbar,html.theme-pro .editor .editor-toolbar{padding:10px 16px 14px!important;column-gap:12px!important;row-gap:6px!important;}
  .editor .editor-toolbar .tb-mid,html.theme-pro .editor .editor-toolbar .tb-mid{gap:8px!important;}
  .editor .editor-toolbar .tb-right{gap:7px!important;}
  .editor .editor-toolbar .tb-group,html.theme-pro .editor .editor-toolbar .tb-group{gap:5px!important;}
  .editor .editor-toolbar .tool-btn,
  html.theme-pro .editor .editor-toolbar .tool-btn,
  html.theme-pro .editor .editor-toolbar .tool-btn.sm{
    width:36px!important;min-width:36px!important;height:36px!important;min-height:36px!important;
    font-size:19px!important;
  }
  .editor .editor-toolbar .tool-btn i,
  .editor .editor-toolbar .split-btn .main{font-size:19px!important;}
  .editor .editor-toolbar .ed-icon,.editor .editor-toolbar .tb-mid .ed-icon{width:21px;height:21px;}
  .editor .editor-toolbar .font-btn,
  html.theme-pro .editor .editor-toolbar .font-btn{
    width:126px;max-width:126px;height:36px!important;min-height:36px;padding:0 9px!important;gap:5px;
  }
  .editor .editor-toolbar .font-btn i{font-size:15px;}
  .editor .editor-toolbar #fsInput,
  html.theme-pro .editor .editor-toolbar #fsInput{width:44px!important;height:36px!important;min-height:36px!important;}
  .editor .editor-toolbar .split-btn{height:36px!important;}
  .editor .editor-toolbar .split-btn .main{width:32px!important;min-width:32px!important;height:34px!important;min-height:34px!important;}
  .editor .editor-toolbar .split-btn .caret{width:22px!important;min-width:22px!important;height:34px!important;min-height:34px!important;}
  .editor .editor-toolbar .tool-sep{height:22px!important;}
  .editor .editor-toolbar .pg-nav{height:36px!important;min-height:36px!important;padding:3px 4px!important;}
  .editor .editor-toolbar .pg-nav button{width:28px!important;height:28px!important;font-size:18px!important;}
  .editor .editor-toolbar .pg-nav input{width:32px!important;height:28px!important;}
  .editor .editor-toolbar .pg-nav .ed-icon{width:18px;height:18px;}
  .editor .editor-toolbar #edTitle,
  html.theme-pro .editor .editor-toolbar #edTitle{max-width:200px!important;min-width:80px!important;height:36px!important;}
}
/* 좁은 데스크톱에서는 도구를 왼쪽부터 채운다 — 가운데 정렬은 넘칠 때
   시작 부분을 스크롤로 당겨 볼 수 없게 만들기 때문이다. */
@media(min-width:1025px) and (max-width:1259px){
  .editor .editor-toolbar .tb-mid,html.theme-pro .editor .editor-toolbar .tb-mid{justify-content:flex-start!important;}
}
/* ── 2단계 · ≤1799: 단추를 한 벌 줄인다 ── */
@media(min-width:1025px) and (max-width:1799px){
  .editor .editor-toolbar .tool-btn,
  html.theme-pro .editor .editor-toolbar .tool-btn,
  html.theme-pro .editor .editor-toolbar .tool-btn.sm{
    width:34px!important;min-width:34px!important;height:34px!important;min-height:34px!important;font-size:18px!important;
  }
  .editor .editor-toolbar .font-btn,
  html.theme-pro .editor .editor-toolbar .font-btn{width:160px;max-width:160px;height:34px!important;min-height:34px;}
  .editor .editor-toolbar #fsInput,
  html.theme-pro .editor .editor-toolbar #fsInput{width:42px!important;height:34px!important;min-height:34px!important;}
  .editor .editor-toolbar .split-btn{height:34px!important;}
  .editor .editor-toolbar .split-btn .main{width:30px!important;min-width:30px!important;height:32px!important;min-height:32px!important;}
  .editor .editor-toolbar .split-btn .caret{width:20px!important;min-width:20px!important;height:32px!important;min-height:32px!important;}
  .editor .editor-toolbar .ed-icon,.editor .editor-toolbar .tb-mid .ed-icon{width:20px;height:20px;}
  .editor .editor-toolbar #edTitle,
  html.theme-pro .editor .editor-toolbar #edTitle{max-width:180px!important;}
}
/* ── 3단계 · ≤1535: 간격·글꼴칸을 더 줄이고 취소선·페인트는 비운다 ── */
@media(min-width:1025px) and (max-width:1535px){
  .editor .editor-toolbar,html.theme-pro .editor .editor-toolbar{padding:8px 12px 12px!important;column-gap:10px!important;}
  .editor .editor-toolbar .tb-mid,html.theme-pro .editor .editor-toolbar .tb-mid{gap:5px!important;}
  .editor .editor-toolbar .tb-right,html.theme-pro .editor .editor-toolbar .tb-right{gap:5px!important;}
  .editor .editor-toolbar .tb-group,html.theme-pro .editor .editor-toolbar .tb-group{gap:3px!important;}
  .editor .editor-toolbar .tb-strike,
  .editor .editor-toolbar .tool-btn.sm.tb-strike,
  html.theme-pro .editor .editor-toolbar .tool-btn.sm.tb-strike{display:none!important;}
  .editor .editor-toolbar #paintBtn,
  html.theme-pro .editor .editor-toolbar .tool-btn#paintBtn{display:none!important;}
  .editor .editor-toolbar .font-btn,
  html.theme-pro .editor .editor-toolbar .font-btn{width:140px;max-width:140px;}
  .editor .editor-toolbar #fsInput,
  html.theme-pro .editor .editor-toolbar #fsInput{width:40px!important;}
  .editor .editor-toolbar .split-btn .main{width:28px!important;min-width:28px!important;}
  .editor .editor-toolbar .split-btn .caret{width:18px!important;min-width:18px!important;}
  .editor .editor-toolbar .pg-nav input{width:28px!important;}
  .editor .editor-toolbar .pg-nav button{width:26px!important;height:26px!important;}
  .editor .editor-toolbar .pg-nav .ed-icon{width:16px;height:16px;}
  .editor .editor-toolbar #edTitle,
  html.theme-pro .editor .editor-toolbar #edTitle{max-width:150px!important;}
}
/* ── 5단계 · ≤1259: 남은 여백을 마저 좁힌다 (숨는 기능 없음) ── */
@media(min-width:1025px) and (max-width:1259px){
  .editor .editor-toolbar,html.theme-pro .editor .editor-toolbar{padding:7px 8px 10px!important;column-gap:6px!important;}
  .editor .editor-toolbar .tb-mid,html.theme-pro .editor .editor-toolbar .tb-mid{gap:4px!important;}
  .editor .editor-toolbar .tb-right,html.theme-pro .editor .editor-toolbar .tb-right{gap:4px!important;}
  .editor .editor-toolbar .font-btn,
  html.theme-pro .editor .editor-toolbar .font-btn{width:120px;max-width:120px;padding:0 6px!important;}
  .editor .editor-toolbar #edTitle,
  html.theme-pro .editor .editor-toolbar #edTitle{max-width:110px!important;}
  .editor .editor-toolbar .pg-nav input{width:24px!important;}
  .editor .editor-toolbar .pg-nav button{width:24px!important;height:24px!important;}
  .editor .editor-toolbar .tool-btn,
  html.theme-pro .editor .editor-toolbar .tool-btn,
  html.theme-pro .editor .editor-toolbar .tool-btn.sm{
    width:32px!important;min-width:32px!important;height:32px!important;min-height:32px!important;font-size:17px!important;
  }
  .editor .editor-toolbar .tool-btn i,
  .editor .editor-toolbar .split-btn .main{font-size:17px!important;}
  .editor .editor-toolbar .ed-icon,.editor .editor-toolbar .tb-mid .ed-icon{width:19px;height:19px;}
  .editor .editor-toolbar .font-btn,
  html.theme-pro .editor .editor-toolbar .font-btn{height:32px!important;min-height:32px;}
  .editor .editor-toolbar #fsInput,
  html.theme-pro .editor .editor-toolbar #fsInput{height:32px!important;min-height:32px!important;}
  .editor .editor-toolbar .split-btn{height:32px!important;}
  .editor .editor-toolbar .split-btn .main{height:30px!important;min-height:30px!important;}
  .editor .editor-toolbar .split-btn .caret{height:30px!important;min-height:30px!important;}
  .editor .editor-toolbar .pg-nav{height:32px!important;min-height:32px!important;}
  .editor .editor-toolbar #edTitle,
  html.theme-pro .editor .editor-toolbar #edTitle{height:32px!important;}
}
/* ── 4단계 · ≤1339: 스티커까지 비우고 남은 여백을 더 좁힌다 ── */
@media(min-width:1025px) and (max-width:1339px){
  .editor .editor-toolbar,html.theme-pro .editor .editor-toolbar{padding:8px 10px 12px!important;column-gap:8px!important;}
  .editor .editor-toolbar .tb-mid,html.theme-pro .editor .editor-toolbar .tb-mid{gap:5px!important;}
  .editor .editor-toolbar .tb-right,html.theme-pro .editor .editor-toolbar .tb-right{gap:4px!important;}
  .editor .editor-toolbar #stkBtn,
  html.theme-pro .editor .editor-toolbar .tool-btn#stkBtn{display:none!important;}
  .editor .editor-toolbar .font-btn,
  html.theme-pro .editor .editor-toolbar .font-btn{width:130px;max-width:130px;padding:0 7px!important;}
  .editor .editor-toolbar #edTitle,
  html.theme-pro .editor .editor-toolbar #edTitle{max-width:130px!important;}
}
/* 15.42.11 · 떠 있는 조약돌 툴바가 첫 페이지 윗부분이나 옆 패널과 겹치지 않게 여백 확보 */
.editor-body{padding:64px 20px 80px!important;}
/* 15.42.16 · 펜·형광펜 색상판이 열려도 이 여백을 바꾸지 않는다 — 화면이
   색상판 높이만큼 내려가는 문제를 없앴다(색상판은 fixed 라 흐름에 안 닿음). */
.editor.focus-on .editor-toolbar,
html.theme-pro .editor.focus-on .editor-toolbar{display:none!important;}
.editor.focus-on .editor-body{padding-top:20px!important;}
@media(min-width:769px){
  .editor:not(.side-off):has(#sidePanel.show) .editor-toolbar{left:248px;}
}

/* ═══════════════════════════════════════════════════════════════════
   17.0 · 모바일 전용 최종 레이아웃

   이 블록은 휴대폰 세로(폭 640px 이하)와 휴대폰 가로(낮은 화면 + coarse
   pointer)에만 적용한다. 데스크톱 선언은 이 미디어쿼리 밖에서 변경하지 않는다.
   모든 모바일 창은 safe-area와 visualViewport 높이(--sdy-mobile-vh)를 사용하고,
   주요 조작은 한 손가락으로 누르기 쉬운 40~44px 이상으로 맞춘다.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
  /* ── 공통 viewport / safe area ─────────────────────────────── */
  html{width:100%;height:100%;overflow:hidden!important;}
  body{
    --ph-safe:env(safe-area-inset-bottom,0px);
    --ph-top:env(safe-area-inset-top,0px);
    --ph-left:env(safe-area-inset-left,0px);
    --ph-right:env(safe-area-inset-right,0px);
    --ph-gap:10px;--ph-bar:66px;--ph-stack:54px;
    --g-blur:9px;--g-blur-lg:13px;
    width:100%;height:100%;min-height:100%;overflow:hidden!important;
    touch-action:auto;overscroll-behavior-y:auto;
  }
  body.has-mpbar{--ph-stack:72px;}
  button,a,[role="button"]{touch-action:manipulation;}
  input[type=text],input[type=search],input[type=password],input[type=email],
  input[type=url],input[type=tel],input[type=number],textarea,select{
    font-size:16px!important;
  }

  /* ── 홈: 두 줄 고정 헤더 + 2열 노트 ──────────────────────── */
  #mainView{
    position:fixed!important;inset:0!important;width:100%;
    height:var(--sdy-mobile-vh,100dvh)!important;min-height:0!important;
    overflow-x:hidden!important;overflow-y:auto!important;
    overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;touch-action:pan-y;
  }
  .header{
    padding:6px 8px!important;
    padding-top:max(6px,var(--ph-top))!important;
    padding-left:max(8px,var(--ph-left))!important;
    padding-right:max(8px,var(--ph-right))!important;
  }
  .header .w-full{
    display:flex!important;flex-direction:column;align-items:stretch!important;
    flex-wrap:nowrap!important;gap:4px!important;
  }
  .app-brand{
    min-height:30px;margin-left:0!important;gap:7px!important;
    flex:0 0 auto;min-width:0;flex-wrap:nowrap!important;
  }
  .app-brand h1{
    flex:1 1 auto;min-width:0;max-width:none!important;font-size:19px!important;
    overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;
    line-height:0;display:flex;align-items:center;
  }
  .app-brand h1 .brand-wordmark{height:28px;transform:translateY(1.5px);}
  .app-brand .logo-dot{width:28px;height:28px;font-size:15px;}
  .link-bar{display:none!important;}
  .hdr-right{
    width:100%;min-width:0;min-height:44px;margin-right:0!important;
    display:flex!important;align-items:center;justify-content:space-between;
    flex:0 0 auto;flex-wrap:nowrap!important;gap:4px!important;
    overflow-x:auto;overflow-y:hidden;scrollbar-width:none;
    -webkit-overflow-scrolling:touch;
  }
  .hdr-right::-webkit-scrollbar{display:none;}
  .hdr-right>#vaultBtn,.hdr-right>#adminToggleBtn,.search-wrap{display:none!important;}
  .header .tool-btn,.header .offline-badge,.header .srv-gauge{
    width:42px!important;min-width:42px;height:42px!important;min-height:42px;
    padding:0!important;display:flex;align-items:center;justify-content:center;
    border-radius:12px;font-size:19px!important;
  }
  .header .srv-gauge svg{width:36px;height:25px;}
  .header .offline-badge span{display:none;}
  #mainView main{
    min-height:calc(var(--sdy-mobile-vh,100dvh) - 88px);
    padding:10px 4px!important;
    padding-bottom:calc(var(--ph-safe) + 122px)!important;
    touch-action:pan-y;
  }
  body:has(#selectBar.show) #mainView main{padding-bottom:calc(var(--ph-safe) + 190px)!important;}
  .breadcrumb{padding:2px 8px 8px;gap:5px;flex-wrap:wrap;font-size:13px;}
  .breadcrumb button{min-height:40px;padding:7px 9px;}
  .note-grid{gap:8px;padding:0 8px;justify-content:flex-start;}
  body .note-card,body .folder-card,body .add-card,
  body.card-s .note-card,body.card-s .folder-card,body.card-s .add-card,
  body.card-l .note-card,body.card-l .folder-card,body.card-l .add-card{
    width:auto;flex:1 1 calc(50% - 4px);max-width:calc(50% - 4px);
    min-width:0;border-radius:14px;
  }
  body .note-preview,body .folder-thumb,
  body.card-s .note-preview,body.card-s .folder-thumb,
  body.card-l .note-preview,body.card-l .folder-thumb{
    height:auto;min-height:0;aspect-ratio:4/5;
  }
  body .add-card,body.card-s .add-card,body.card-l .add-card{
    min-height:0;aspect-ratio:4/5.35;
  }
  .note-card-name{min-height:48px;padding:9px 10px;font-size:13px;line-height:1.35;}
  .note-card:hover,.folder-card:hover,.add-card:hover{transform:none;}
  .note-card:active,.folder-card:active,.add-card:active{transform:scale(.98);}
  .card-menu{display:flex;width:40px;height:40px;right:5px;top:5px;border-radius:11px;font-size:18px;}
  .emoji-badge{width:40px;height:40px;top:5px;left:5px;opacity:.72;}
  .pin-badge,.unlock-badge{width:36px;height:36px;}
  .home-add-note{min-height:44px;padding:5px 14px 5px 7px;font-size:12.5px;}
  .home-add-icon{width:32px;height:32px;font-size:20px;}
  .stack-scene{padding-left:8px!important;padding-right:8px!important;}
  /* 17.7 · 좌우 22px 는 호버 그림자(±18px)가 잘리지 않는 최소 여유 */
  .recent-row{scroll-snap-type:x proximity;max-width:calc(100vw - 12px)!important;padding-left:22px!important;padding-right:22px!important;}
  .recent-row .note-card{scroll-snap-align:center;}

  /* 선택 작업은 엄지손가락용 2×2 하단 작업판 */
  .select-bar{
    left:max(8px,var(--ph-left));right:max(8px,var(--ph-right));bottom:calc(var(--ph-safe) + 8px);
    width:auto;display:grid;grid-template-columns:1fr 1fr;gap:7px;
    padding:10px;border-radius:18px;transform:translateY(calc(100% + 28px));z-index:1900;
  }
  .select-bar.show{transform:translateY(0);}
  .select-bar>span{grid-column:1/-1;text-align:center;}
  .select-bar button{min-height:44px!important;padding:8px 10px!important;justify-content:center;}

  /* ── 에디터: 폭 맞춤 종이 + 가로 스크롤 도구막대 ─────────── */
  .editor{
    width:100%;height:var(--sdy-mobile-vh,100dvh);bottom:auto;
    overflow:hidden;
  }
  .editor-toolbar{
    display:flex!important;align-items:center;gap:5px;
    min-height:52px;padding:5px max(6px,var(--ph-right)) 8px max(6px,var(--ph-left))!important;
    padding-top:max(5px,var(--ph-top))!important;
    overflow-x:auto!important;overflow-y:hidden!important;
    pointer-events:auto;
    touch-action:pan-x!important;overscroll-behavior-x:contain;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;
  }
  .editor-toolbar::-webkit-scrollbar{display:none;}
  .editor-toolbar .tb-left,.editor-toolbar .tb-mid,.editor-toolbar .tb-right{
    flex:0 0 auto;justify-self:auto;gap:3px;
  }
  .editor-toolbar .tool-btn,.editor-toolbar .tool-btn.sm{
    width:40px!important;min-width:40px;height:40px!important;min-height:40px;
    font-size:18px!important;border-radius:11px;
  }
  .editor-toolbar #edTitle{
    flex:0 0 150px!important;width:150px;min-width:150px!important;
    min-height:40px;padding:7px 9px;font-size:16px!important;
  }
  .editor-toolbar .tb-group{padding:0;background:transparent;border:0;}
  .tool-sep{margin:0 2px;}
  .pg-nav{min-height:40px;padding:3px 6px!important;}
  .pg-nav button{width:34px;height:34px;}
  .pg-nav input{width:40px;height:34px;font-size:16px!important;}
  .editor-body{
    overflow:auto!important;min-width:0;
    padding:calc(max(6px,var(--ph-top)) + 56px) 3px calc(var(--ph-safe) + 96px)!important;
    scroll-padding:72px 0 calc(var(--ph-safe) + 120px);
    -webkit-overflow-scrolling:touch;overscroll-behavior:contain;
    touch-action:pan-x pan-y;
    overflow-anchor:none;
}
  /* 15.42.16 · 색상판이 열려도 위 padding 을 바꾸지 않는다(화면 내려가는 문제 제거). */
  .pages-stage{margin:0 auto;
    overflow-anchor:none;
}
  .side-bar,.side-open{display:none!important;}
  .side-panel{left:0!important;top:0;bottom:0;max-width:calc(100vw - 48px);z-index:1150;}
  .side-panel.show{width:min(86vw,340px)!important;}
  .sp-head{min-height:48px;padding:8px 10px 8px 14px;}
  .sp-head button,.sp-mini{width:40px;height:40px;}
  .sp-item,.sp-sec{min-height:42px;padding-top:10px;padding-bottom:10px;}

  #fsInput{width:46px;height:32px;font-size:15px!important;min-width:46px;}
  .tb-move{width:34px;height:34px;left:-39px;top:-39px;font-size:17px;}
  .el-del{width:34px;height:34px;right:-39px;top:-39px;font-size:16px;}
  .handle{--hdl-sz:max(var(--hs,18px),calc(18px / var(--pz,1)));width:var(--hdl-sz);height:var(--hdl-sz);}
  .draw-toolbar{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    top:calc(var(--sdy-edbar-bottom, 64px) + 8px)!important;bottom:auto!important;
    width:auto!important;max-width:none!important;
    transform:none!important;overflow-x:auto!important;justify-content:flex-start;
    padding:8px 10px!important;gap:10px;white-space:nowrap;z-index:1350!important;
    -webkit-overflow-scrolling:touch;touch-action:pan-x;
  }
  .draw-toolbar .color-pick{width:34px;height:34px;min-width:34px;}
  .draw-toolbar .tool-btn{width:42px!important;height:42px!important;min-width:42px;}

  /* 에디터의 작은 팝업은 화면을 벗어나지 않는 모바일 시트로 */
  .font-menu.show,.color-popover.show,.fav-pop.show,.tint-pop.show,.pin-pop.show{
    position:fixed!important;left:max(8px,var(--ph-left))!important;right:max(8px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 8px)!important;
    width:auto!important;min-width:0!important;max-width:none!important;max-height:58dvh;
    overflow-y:auto;border-radius:16px;padding:10px;z-index:2050;
  }
  .font-item,.fav-item,.tint-opt{min-height:44px;}
  .color-swatch{width:38px;height:38px;}
  .pin-pop textarea{min-height:112px;font-size:16px!important;}
  .pin-pop button{min-height:44px;}
  .find-bar{
    left:max(8px,var(--ph-left))!important;right:max(8px,var(--ph-right))!important;
    top:calc(var(--ph-top) + 58px)!important;width:auto;max-width:none;
    padding:8px;border-radius:14px;flex-wrap:wrap;
  }
  .find-bar input{flex:1 1 150px;width:auto;min-width:0;height:40px;}
  .find-bar button{width:40px;height:40px;}
  .find-row2{width:100%;}
  .wf-bar{
    left:max(8px,var(--ph-left));right:max(8px,var(--ph-right));top:calc(var(--ph-top) + 58px);
    transform:none;max-width:none;white-space:normal;flex-wrap:wrap;border-radius:14px;
  }
  .wf-bar button{min-height:40px;}
  .tbl-bar{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    width:auto;max-width:none;overflow-x:auto;white-space:nowrap;
    -webkit-overflow-scrolling:touch;border-radius:14px;
  }
  .tbl-bar button{min-width:40px;width:40px;height:40px;}
  /* 모바일: 표 손잡이 크기 확대 + 선택(.on) 상태에서 항상 표시 */
  .tbl-box.on .tbl-h{width:calc(18px / var(--pz,1));height:calc(18px / var(--pz,1));}
  .tbl-box.on .tbl-stretch{width:calc(22px / var(--pz,1));height:calc(22px / var(--pz,1));}
  .tbl-box.on .tbl-div.col{width:calc(20px / var(--pz,1));}
  .tbl-box.on .tbl-div.row{height:calc(20px / var(--pz,1));}
  .tbl-box.on .tbl-frame{opacity:1;}
  .tbl-box.on .tbl-h,
  .tbl-box.on .tbl-stretch,
  .tbl-box.on .tbl-edge,
  .tbl-box.on .tbl-div{opacity:1;pointer-events:auto;}
  .more-panel{
    left:0;right:0;top:calc(var(--ph-top) + 52px);bottom:auto;width:100%;
    max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - 54px);
    border-radius:0 0 20px 20px;padding-bottom:var(--ph-safe);
  }
  .more-tabs button{min-height:44px;padding:10px 4px;}
  .more-grid{grid-template-columns:repeat(3,1fr);}
  .more-grid button{min-height:76px;}

  /* ── 공통 모달: 모바일 하단 시트 ──────────────────────────── */
  .modal-bg{
    align-items:flex-end;justify-content:center;overflow:hidden;
    padding:max(8px,var(--ph-top)) max(8px,var(--ph-right)) max(8px,var(--ph-safe)) max(8px,var(--ph-left));
  }
  .modal-box:not(.cards-box){
    width:100%!important;max-width:none!important;
    max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 16px)!important;
    overflow-x:hidden;overflow-y:auto;padding:18px 16px!important;
    border-radius:22px 22px 14px 14px!important;overscroll-behavior:contain;
  }
  #uploadProg,#importProg{align-items:center;}
  #uploadProg .modal-box,#importProg .modal-box{width:min(330px,100%)!important;border-radius:18px!important;}
  .modal-box input:not([type=range]):not([type=checkbox]):not([type=file]),
  .modal-box select,.modal-box textarea{min-height:44px;max-width:100%;}
  .modal-box>button,.modal-box .import-btn,.modal-box .size-preset-card,
  .modal-box .trash-item button,.modal-box .sp-btn,
  .latex-modal-actions button{min-height:44px;}
  .modal-box .tool-btn,.modal-box .cards-x{min-width:42px;width:42px;height:42px;}
  .set-row{align-items:flex-start;padding:14px 0;}
  .set-row>.set-label{flex:1 1 130px;}
  .set-row>div[style*="display:flex"]{max-width:100%;flex-wrap:wrap;}
  .set-row select{min-width:132px;}
  .paper-ticker{height:36px;margin-bottom:7px;border-radius:7px;}
  .paper-ticker-label{padding:0 9px;font-size:10.5px;}
  .paper-ticker-label i{font-size:13px;}
  .paper-ticker-label b{max-width:82px;overflow:hidden;text-overflow:ellipsis;}
  .paper-ticker-paper{max-width:min(72vw,430px);padding:0 14px;font-size:12px;line-height:36px;}
  .paper-keyword-control{flex:1 0 100%;margin-left:0;}
  .paper-keyword-form{max-width:320px;}
  .accent-swatch{width:34px;height:34px;}
  #sizePresetGrid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:9px!important;}
  #exportModal .modal-box>div[style*="grid"]{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important;}
  .trash-item{align-items:flex-start;flex-wrap:wrap;}
  .trash-item b{flex:1 1 calc(100% - 90px);}
  .fcolor-dot{width:42px;height:42px;}
  .ficon-btn{width:44px;height:44px;}
  #keyBody{max-height:calc(var(--sdy-mobile-vh,100dvh) - 170px)!important;}
  .key-row{align-items:flex-start;line-height:1.5;}

  /* 보관함(드라이브) — 25.0 · 창이 아니라 화면 전체. 레일은 서랍으로 접히고
     조작면은 전부 44px 이상, 목록 구역만 스크롤된다. */
  #stickerModal .modal-box{height:min(88dvh,720px);display:flex;flex-direction:column;}
  #vaultModal.vd{height:var(--sdy-mobile-vh,100dvh);}
  .vd-ic,.vd-q-ic,.vd-star,.vd-row-act{min-width:44px;height:44px;}
  .vd-viewtog{padding:3px;}
  .vd-viewtog button{width:38px;height:34px;}
  /* 25.1 · 심화 기능도 손가락에 맞춘다 — 조작대·사진 도구는 줄바꿈,
     저장공간 상세와 단축키 도움말은 아래에서 올라오는 시트가 된다. */
  .vd-mctl{flex-wrap:wrap;gap:4px;padding:6px 8px;margin-top:8px;width:100%;border-radius:12px;}
  .vd-mb{min-width:44px;height:44px;padding:0 8px;border-radius:11px;}
  .vd-mb-play{min-width:48px;height:48px;}
  .vd-mvol{width:64px;}
  .vd-mtime{font-size:11.5px;}
  .vd-mseek{order:9;flex:1 1 100%;height:30px;}
  .vd-pv-imgtools{flex-wrap:wrap;max-width:100%;padding:6px 8px;}
  .vd-filter{padding:8px 10px 10px;}
  .vd-f-row{grid-template-columns:1fr;gap:5px;}
  .vd-f-lab{padding-top:0;font-size:11px;}
  .vd-fchip{height:36px;padding:0 13px;font-size:13px;}
  .vd-f-count{margin-left:0;width:100%;}
  .vd-sto,.vd-help{align-items:flex-end;}
  .vd-sto-box,.vd-help-box{
    width:100vw;max-width:100vw;max-height:88dvh;
    border-radius:20px 20px 0 0;border-left:0;border-right:0;border-bottom:0;
  }
  .vd-help-keys{min-width:110px;}
  .vd-sto-ic{width:34px;height:34px;}
  .vd-check{width:22px;height:22px;}
  .vd-search{flex:1 1 150px;min-width:120px;height:44px;}
  .vd-scroll{flex:1;min-height:180px;max-height:none;padding-bottom:calc(120px + var(--ph-safe,0px));}
  .vd-list.grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));}
  .vd-selbar{position:sticky;top:0;z-index:8;}
  .vd-dt-act,.vd-menu-i,.vd-dlg-btn{min-height:44px;}
  .vd-empty button,.vd-loadmore button{min-height:44px;}
  /* 스티커 보관함(창)은 예전 격자를 그대로 쓴다 */
  .vault-desk{flex:1;min-height:180px;max-height:none;padding:8px;}
  .vault-grid{grid-template-columns:repeat(auto-fill,minmax(82px,1fr));}
  .v-file{min-height:96px;padding:9px 5px;}

  /* 암기 카드 창은 드래그 좌표 대신 화면 안에 고정 */
  .modal-bg .modal-box.cards-box,.fcard-win,.fcard-win.moved{
    left:max(7px,var(--ph-left))!important;right:max(7px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 7px)!important;
    transform:none!important;width:auto!important;max-width:none!important;
    height:min(88dvh,720px);max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 14px)!important;
    border-radius:20px!important;
  }
  .fcard-head{min-height:44px;padding:4px 8px;cursor:default;touch-action:manipulation;}
  .fcard-head .cards-x{width:40px;height:40px;}
  #cardsHome,#cardsStudy,#cardsPaste,#cardsStats,#cardsAnalytics,#cardsBrowse{padding:12px;}
  .cards-actions{display:grid;grid-template-columns:1fr 1fr;width:100%;}
  .cards-actions .cd-btn{width:100%;min-height:44px;}
  .fc-mode,.cd-opt,.cd-deck,.cd-br{min-height:48px;}
  .cd-inner{height:min(42dvh,300px);}

  /* ── 알림 / 서버 상태 / 로그인 ────────────────────────────── */
  .notif-pop,.srv-pop{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    top:calc(var(--ph-top) + 92px)!important;width:auto!important;max-width:none;
    max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - 104px);
    border-radius:17px;
  }
  .notif-item{min-height:54px;}
  #sdyAuthWrap,#ypGate{
    align-items:flex-end;padding:max(8px,var(--ph-top)) max(8px,var(--ph-right)) max(8px,var(--ph-safe)) max(8px,var(--ph-left));
  }
  .sa-card,.ypg-card{
    width:100%;max-width:none;max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 16px);
    overflow-y:auto;border-radius:22px 22px 14px 14px;padding:22px 18px 18px;
  }
  .sa-x{width:44px;height:44px;top:7px;right:7px;}
  .sa-step input,.sa-btn{min-height:46px;}
  .sa-sendbtn{height:46px;padding:0 13px;font-size:12.5px;}
  .sa-row{flex-wrap:wrap;}
  .sa-row>label{width:100%;}
  .sa-nickedit{width:100%;flex-basis:100%;}
  .sa-mini{min-height:44px;}
  .ypg-btn{min-height:62px;}

  /* ── 음악: 컨트롤바 / 목록 / 큰 플레이어 / 편집창 ───────── */
  .mp{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    bottom:calc(var(--ph-safe) + 12px)!important;width:auto!important;max-width:none!important;
    transform:none!important;gap:6px;padding:7px 8px;border-radius:16px;
  }
  .mp-cover{width:38px;height:38px;}
  .mp-title{font-size:12.5px;}
  .mp-mid{flex:1 1 auto;min-width:44px;}
  .mp-btns{flex:0 0 auto;gap:1px;}
  .mp-btns button,#mpX{
    width:40px!important;min-width:40px;height:40px!important;min-height:40px;font-size:18px!important;
  }
  .mp-btns .mp-pp{width:42px!important;height:42px!important;font-size:20px!important;}
  #mpX{width:34px!important;min-width:34px;height:40px!important;font-size:16px!important;}
  .mp-prog{height:7px;margin-top:8px;}
  /* 플로팅 음반 폰 규칙(19.0)은 문서 맨 끝 블록 안에 있다. */
  .mp-list{
    left:0!important;right:0!important;bottom:0!important;width:100%!important;max-width:none!important;
    transform:none!important;max-height:min(76dvh,620px)!important;
    padding:10px max(10px,var(--ph-right)) calc(var(--ph-safe) + 10px) max(10px,var(--ph-left));
    border-radius:20px 20px 0 0;
  }
  .mp-library-tools{padding:8px 4px 4px;}
  #musicListPop .mp-search{min-height:44px;font-size:16px!important;}
  .mp-sortbtn,.mp-addpl,.mp-lfoot button{min-width:42px;min-height:42px;}
  .mp-tabs{overflow-x:auto;flex-wrap:nowrap;}
  .mp-tabs button{min-height:42px;}
  .mp-li,.mp-pl,.mp-plsub{min-height:48px;}
  #mpReopen,#ypReopen{right:max(12px,var(--ph-right));width:46px;height:46px;}
  #mpReopen{bottom:calc(var(--ph-safe) + var(--ph-gap));font-size:20px;}
  #ypReopen{bottom:calc(var(--ph-safe) + var(--ph-gap) + var(--ph-stack));}
  /* 14.23.0 · AI 아이콘·창은 없다 — 해돌이 옆 검색창·말풍선·기록만 safe-area 를 피해 올린다 */
  .ai-askbar{left:calc(90px + var(--ph-left));}
  .ai-askbar,.ai-askbar.draw-on{bottom:calc(var(--ph-safe) + 22px);}
  .ai-say,.ai-hist{left:max(10px,var(--ph-left));right:max(10px,var(--ph-right));width:auto;}
  .ai-say,.ai-hist,.ai-say.draw-on,.ai-hist.draw-on{bottom:calc(var(--ph-safe) + 80px + var(--ai-lift,0px));}
  .ai-say-body{max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 220px);}

  .mpb{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 6px)!important;
    width:auto!important;max-width:none!important;height:min(86dvh,720px);max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 12px)!important;
    transform:none!important;border-radius:20px;
  }
  .mpb-head{min-height:44px;padding:3px 6px;cursor:default;touch-action:manipulation;}
  .mpb-head button,.mpb-head .mpb-mini{width:40px!important;min-width:40px;height:40px!important;font-size:18px;}
  .mpb-body{padding:10px 9px 8px;}
  .mpb-now{gap:10px;padding:9px!important;}
  .mpb-cwrap,.mpb-vinyl,.mpb-cwrap .mpb-cover{width:92px!important;height:92px!important;}
  .mpb-title{font-size:15px!important;}
  .mpb-ctl{gap:5px;}
  .mpb-ctl button{width:42px;height:42px;font-size:20px;}
  .mpb-ctl .pp{width:50px;height:50px;}
  .mpb-row2 button,.mpb-ric{min-width:40px;height:40px;}
  .mpb-tabs{flex-wrap:nowrap!important;overflow-x:auto;}
  .mpb-tabs button,.mpb-tabs button.mpb-icon{min-height:40px;height:40px;}
  #mpBig .mpb-tabs button.mp-sortbtn{min-height:40px;height:40px;width:29px;padding:0;}
  .mpb-searchbar{min-height:44px;}
  .mpb-searchbar input{font-size:16px!important;}
  .mpb-li{min-height:46px;}
  .mpb-pager button{min-height:40px;}
  .mp-eqpop{left:6px!important;right:6px!important;width:auto!important;max-width:none!important;}

  .mp-tagm{align-items:flex-end;padding:max(8px,var(--ph-top)) max(8px,var(--ph-right)) max(8px,var(--ph-safe)) max(8px,var(--ph-left));}
  .mp-tagm .box{
    width:100%;max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 16px);
    border-radius:22px 22px 14px 14px;
  }
  .mp-tagm .head{min-height:50px;position:sticky;top:0;z-index:2;background:var(--card);}
  .mp-tagm .head button{width:42px;height:42px;}
  .mp-url-bar{flex-wrap:wrap;}
  #mpTagUrlInput{flex-basis:100%!important;height:44px!important;}
  #mpTagUrlBtn{height:44px!important;}
  .mp-tagm input[type=text]{height:44px;}
  .mp-tagm .cbtns button,.mp-tagm .acts button{min-height:42px;height:auto;}
  .mp-tagm .acts{position:sticky;bottom:0;background:var(--card);padding-bottom:calc(var(--ph-safe) + 10px);}
  .mp-addpop{
    left:max(8px,var(--ph-left))!important;right:max(8px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 8px)!important;width:auto!important;
    max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 16px);
    overflow-y:auto;border-radius:20px;padding:14px;
  }
  .mp-addpop .head button{width:42px;height:42px;}
  .mp-addpop .file,.mp-addpop input,.mp-addpop .go{min-height:46px;}

  /* ── 엽스코드: 화면 안의 채팅 시트 ────────────────────────── */
  #ypApp{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 6px)!important;
    width:auto!important;max-width:none!important;
    height:min(78dvh,680px)!important;max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 12px);
    border-radius:20px;
  }
  .yp-head{min-height:48px;padding:4px 7px;cursor:default;touch-action:manipulation;}
  #ypApp #ypHead button,#ypHead #ypBack,#ypHead #ypFrBtn{width:40px;height:40px;font-size:18px;}
  .yp-voice{padding:7px 8px;gap:6px;}
  .ypv-join,.ypv-mute,.ypv-icon,.ypv-gear{width:40px;height:40px;font-size:17px;}
  .yp-vchip{min-height:32px;}
  .yp-bgm{flex-wrap:wrap;padding:7px 8px;}
  .yp-bgm input[type=text]{width:auto;flex:1 1 130px;min-height:40px;font-size:16px!important;}
  .yp-bgm input[type=range]{width:84px;}
  .yp-stack{max-width:84%;}
  .yp-img{max-width:min(72vw,260px);max-height:260px;}
  .yp-file{min-width:0;max-width:min(76vw,280px);}
  .yp-foot{padding:8px 8px max(8px,var(--ph-safe));}
  .yp-tools button,.yp-send{width:42px;height:42px;}
  .yp-input textarea{min-height:42px;font-size:16px!important;}
  .yp-emoji{left:8px;right:8px;bottom:58px;grid-template-columns:repeat(6,1fr);}
  .yp-emoji button{width:46px;height:46px;justify-self:center;font-size:0;}
  .yp-emoji button .yp-stk{width:36px;}
  .yp-react-row button{width:40px;height:40px;}
  .yp-settings{left:8px;right:8px;top:54px;width:auto;max-height:62dvh;overflow-y:auto;}
  .yp-set-row{min-height:44px;}
  .yp-set-btn{width:40px;height:40px;}
  .ypfr-item{min-height:54px;}
  .ypfr-btn{min-height:40px;padding:8px 11px;}
  .ypfr-add input,.ypfr-add button{min-height:44px;}

  /* ── 집중 시계 ─────────────────────────────────────────────── */
  #focusClock{
    height:var(--sdy-mobile-vh,100dvh);
    padding:calc(var(--ph-top) + 116px) 10px calc(var(--ph-safe) + 118px);
  }
  #focusClock .fc-chrome.top{top:calc(var(--ph-top) + 50px);padding:6px 8px;}
  #focusClock .fc-modes{display:flex;grid-template-columns:none;max-width:calc(100vw - 16px);overflow-x:auto;}
  #focusClock .fc-modes button{min-height:42px;padding:8px 11px;white-space:nowrap;}
  .fc-x{top:calc(var(--ph-top) + 8px);width:42px;height:42px;}
  .fc-time{font-size:clamp(48px,19vw,104px);}
  .fc-ring{width:min(42dvh,82vw,330px);height:min(42dvh,82vw,330px);}
  .fc-ring .fc-time{font-size:clamp(42px,15vw,86px);}
  .fc-chrome.bottom{max-height:112px;overflow-y:auto;padding:8px 8px max(10px,var(--ph-safe));}
  .fc-btn{min-height:44px;padding:10px 15px;}
  .fc-preset{min-height:40px;padding:8px 12px;}
  .fc-custom input{height:42px;font-size:16px!important;}

  /* ── 나머지 오버레이 / 발표 / 진행 상태 ─────────────────── */
  .ctx-menu.show,.mpctx.show,.pl-mini{
    left:max(8px,var(--ph-left))!important;right:max(8px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 8px)!important;
    width:auto!important;min-width:0!important;max-width:none!important;
    max-height:min(68dvh,560px)!important;overflow-x:hidden;overflow-y:auto;
    border-radius:18px!important;padding:8px!important;overscroll-behavior:contain;
  }
  .ctx-menu.show .ctx-item,.mpctx .ci,.pl-mini button{min-height:44px;padding:11px 12px!important;}
  .present{height:var(--sdy-mobile-vh,100dvh);padding:10px;}
  .present img{max-width:calc(100vw - var(--ph-left) - var(--ph-right) - 12px);max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 78px);}
  .present-bar{bottom:calc(var(--ph-safe) + 8px);}
  .present-bar button{width:44px;height:44px;}
  #viewer{padding:max(8px,var(--ph-top)) max(8px,var(--ph-right)) max(8px,var(--ph-safe)) max(8px,var(--ph-left));}
  #viewer img{max-width:100%!important;max-height:100%!important;object-fit:contain;}
  .toast{top:calc(var(--ph-top) + 8px);max-width:calc(100vw - var(--ph-left) - var(--ph-right) - 16px);padding:11px 16px;text-align:center;}
  #welcomeToast{left:max(8px,var(--ph-left));right:max(8px,var(--ph-right));top:calc(var(--ph-top) + 8px);transform:translateY(-24px) scale(.96);padding:12px 14px;}
  #welcomeToast.show{transform:none;}
  #uploadBadge{left:max(8px,var(--ph-left))!important;right:max(8px,var(--ph-right))!important;bottom:calc(var(--ph-safe) + 72px)!important;width:auto;}
  #expProg{width:calc(100vw - var(--ph-left) - var(--ph-right) - 24px)!important;max-width:420px;}
  #trProg{top:calc(var(--ph-top) + 8px);width:calc(100vw - var(--ph-left) - var(--ph-right) - 16px);}
  #staleBar{top:calc(var(--ph-top) + 8px);}
  .latex-modal-box{width:100%!important;}
  .latex-input{height:132px;margin:12px;width:calc(100% - 24px);}
  .latex-preview{min-height:96px;margin:10px 12px;}
  .latex-examples{padding:0 12px;}
  .latex-examples button{min-height:40px;}
}

/* 아주 좁은 폰도 2열을 유지하되 간격만 줄인다. */
@media (max-width:380px){
  .note-grid{gap:6px;padding:0 6px;}
  body .note-card,body .folder-card,body .add-card,
  body.card-s .note-card,body.card-s .folder-card,body.card-s .add-card,
  body.card-l .note-card,body.card-l .folder-card,body.card-l .add-card{
    flex:1 1 calc(50% - 3px);max-width:calc(50% - 3px);
  }
  .header .tool-btn,.header .offline-badge,.header .srv-gauge{width:40px!important;min-width:40px;height:40px!important;}
  .editor-toolbar #edTitle{flex-basis:132px!important;width:132px;min-width:132px!important;}
}

/* 휴대폰 가로: 넓은 폭은 쓰고 낮은 높이는 아낀다. coarse pointer라 PC에는 적용되지 않는다. */
@media (max-height:560px) and (pointer:coarse) and (orientation:landscape){
  .header{padding-top:max(4px,var(--ph-top))!important;padding-bottom:4px!important;}
  .header .w-full{flex-direction:row;align-items:center!important;gap:8px!important;}
  .app-brand{flex:1 1 auto;}
  .app-brand h1{font-size:17px!important;}
  .hdr-right{width:auto;flex:0 0 auto;}
  #mainView main{padding-top:8px!important;}
  body .note-card,body .folder-card,body .add-card,
  body.card-s .note-card,body.card-s .folder-card,body.card-s .add-card,
  body.card-l .note-card,body.card-l .folder-card,body.card-l .add-card{
    flex:1 1 calc(25% - 6px);max-width:calc(25% - 6px);
  }
  .modal-bg{align-items:center;}
  .modal-box:not(.cards-box){width:min(620px,100%)!important;border-radius:18px!important;}
  #vaultModal .modal-box,#stickerModal .modal-box{width:min(760px,100%)!important;height:calc(var(--sdy-mobile-vh,100dvh) - 16px);}
  .modal-bg .modal-box.cards-box,.fcard-win,.fcard-win.moved{
    top:8px!important;bottom:8px!important;left:8px!important;right:8px!important;
    height:auto;max-height:none!important;
  }
  .mp{
    left:50%!important;right:auto!important;width:min(680px,calc(100vw - var(--ph-left) - var(--ph-right) - 12px))!important;
    transform:translateX(-50%)!important;
  }
  .mpb{
    left:50%!important;right:auto!important;width:min(720px,calc(100vw - var(--ph-left) - var(--ph-right) - 12px))!important;
    height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 12px);
    transform:translateX(-50%)!important;
  }
  .mpb-body{flex-direction:row;}
  .mpb-stage{flex:0 0 45%;}
  .mpb-drawer{flex:1 1 auto;}
  #ypApp{
    left:auto!important;right:max(6px,var(--ph-right))!important;top:max(6px,var(--ph-top))!important;
    bottom:max(6px,var(--ph-safe))!important;width:min(430px,56vw)!important;height:auto!important;max-height:none;
  }
  #sdyAuthWrap,#ypGate{align-items:center;}
  .sa-card,.ypg-card{width:min(440px,100%);border-radius:18px;}
  #focusClock{padding:calc(var(--ph-top) + 58px) 72px calc(var(--ph-safe) + 74px);}
  #focusClock .fc-chrome.top{top:var(--ph-top);}
  #focusClock .fc-time{font-size:clamp(46px,14vh,82px);}
  #focusClock .fc-ring{width:min(48vh,250px);height:min(48vh,250px);}
  .fc-chrome.bottom{max-height:72px;}

  /* ── 터치 피드백 & UX 추가 개선 ────────────────────────────── */
  /* 모든 클릭 가능 요소에 터치 시 시각 피드백 */
  .note-card:active,.folder-card:active,.add-card:active{transform:scale(.97);opacity:.85;}
  .tool-btn:active{transform:scale(.92);opacity:.8;}
  .header .tool-btn:active{transform:scale(.9);opacity:.8;}
  .ctx-item:active{background:var(--bg2);opacity:.8;}
  .sp-item:active,.sp-sec:active{background:var(--bg2);}
  .breadcrumb button:active{opacity:.75;}
  /* 이미지 뷰어: 모바일에서 더 크게, 터치로 닫기 쉽게 */
  .present-bar button{width:48px;height:48px;font-size:20px;}
  /* 사이드 패널 스와이프 닫기 힌트 */
  .side-panel.show{animation:panelSlideIn .2s ease;}
  @keyframes panelSlideIn{from{transform:translateX(-20%);opacity:.6}to{transform:none;opacity:1}}
  /* 텍스트 상자 편집 시 키보드 올라와도 잘 보이게 */
  .tb.edit{z-index:100!important;}
  /* 표 도구 막대 스크롤 힌트 */
  .tbl-bar::after{
    content:'';position:absolute;right:0;top:0;bottom:0;width:24px;
    background:linear-gradient(to right,transparent,var(--card));
    pointer-events:none;border-radius:0 14px 14px 0;
  }
  /* 설정 모달 내 스크롤 개선 */
  .set-row{min-height:52px;}
  .set-row label{min-height:44px;display:flex;align-items:center;}
}


/* 15.0 · 암기 카드 확장 — 폰·작은 터치 화면에서는 여백 없이 정말 꽉 차게.
   (17.0 최종 모바일 블록의 창 고정 규칙보다 뒤에 와야 확장이 그 규칙을 이긴다) */
/* 폰·작은 터치 화면: 여백 없이 진짜 꽉 차게, 단 1열 위주로 */
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
  .fcard-win.fcard-max{left:0!important;top:0!important;
    width:100vw!important;max-width:100vw!important;
    height:100dvh!important;max-height:100dvh!important;
    padding-top:env(safe-area-inset-top,0px);
    padding-bottom:env(safe-area-inset-bottom,0px);
    padding-left:env(safe-area-inset-left,0px);
    padding-right:env(safe-area-inset-right,0px);
    box-sizing:border-box;
    border-radius:0!important;box-shadow:none!important;}
  .fcard-win.fcard-max #cardsHome,.fcard-win.fcard-max #cardsStudy,
  .fcard-win.fcard-max #cardsPaste,.fcard-win.fcard-max #cardsStats,
  .fcard-win.fcard-max #cardsAnalytics,.fcard-win.fcard-max #cardsBrowse{padding:12px 14px;}
  .fcard-win.fcard-max .fcard-head{min-height:46px;padding:4px 10px;gap:8px;}
  .fcard-win.fcard-max .fcard-head .cards-x{width:40px;height:40px;font-size:18px;}
  .fcard-win.fcard-max #cardsStudy>*{max-width:none;}
  .fcard-win.fcard-max .cd-inner{height:min(42dvh,340px);}
  .fcard-win.fcard-max .cd-face{padding:22px 18px;}
  .fcard-win.fcard-max .cd-txt{font-size:clamp(18px,5.2vw,24px);}
  .fcard-win.fcard-max .cd-qq{padding:20px 16px;}
  .fcard-win.fcard-max .cd-opts{grid-template-columns:1fr;}
  .fcard-win.fcard-max .cd-mgrid{grid-template-columns:repeat(2,1fr);}
  .fcard-win.fcard-max .cd-tile{min-height:76px;font-size:12.5px;}
  .fcard-win.fcard-max .fc-modes{grid-template-columns:repeat(2,1fr);}
  .fcard-win.fcard-max .fc-mode{flex-direction:row;padding:14px 12px;text-align:left;}
  .fcard-win.fcard-max .fc-mode i{font-size:20px;}
  .fcard-win.fcard-max .cd-keyhints{display:none;}     /* 터치 기기 — 키보드 안내는 의미가 없다 */
  .fcard-win.fcard-max #cardsStudy .cd-sess{display:none;} /* 폰 상단바는 좁으니 진행률·연속 정답만 */
  /* 18.3 · 폰·작은 화면은 옆에 붙이면 카드가 너무 좁아지므로,
     예전처럼 왼쪽 위에 얹힌 작은 해돌이로 되돌린다 */
  .fcard-win.fcard-max .cd-otter{
    position:absolute;left:clamp(12px,3vw,56px);top:50%;bottom:auto;
    transform:translateY(-50%);width:clamp(104px,12vw,150px);
  }
}

@media (max-width:640px){
  /* 14.65 · 프로 테마 폰 — 60px 아이콘 레일만큼 오른쪽이 잘리던 것.
     #mainView 는 inset:0 + width:100% 인데 레일 규칙이 left:60px 만 이겨서
     폭이 그대로 100% → 오른쪽 60px(카드·배지·버튼 끝)이 화면 밖으로 나갔다. */
  html.theme-pro #mainView{left:60px!important;width:calc(100% - 60px)!important;}
  /* 홈 검색 해돌이 — 좁은 화면은 답 카드가 화면을 다 먹지 않게 */
  .home-ai-card{margin-bottom:12px;border-radius:9px;}
  .home-ai-out{padding:11px 12px;font-size:15px;line-height:1.75;max-height:46vh;}
  .home-ai-acts{padding:0 12px 10px;}
}


/* ── 22.0-N · NoteFlow — 좁은 화면 ───────────────────────────────────
   데스크탑 3열 그리드는 좁아지면 2열 → 1열. 사이드바는 서랍(상단줄 메뉴
   단추로 연다)이 되고, 오른쪽 칸(Now Playing·Flashcard·Chat)은 숨긴다.
   이 블록은 14.65 의 60px 레일 보정보다 뒤에 와서 이긴다. */
@media (max-width:1180px){
  html.theme-pro .nf-rail{display:none!important;}
  html.theme-pro .nf-rail-tab{display:none!important;}
  html.theme-pro body.nf-rail-open #mainView{margin-right:0!important;}
  html.theme-pro #mainView > main{margin-right:0!important;}
  html.theme-pro #noteGrid.nf-grid,
  html.theme-pro #nfPinned{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:1023px){
  html.theme-pro #proSide{
    position:fixed!important;inset:0 auto 0 0!important;
    width:264px;flex:0 0 264px;transform:translateX(-102%);
    transition:transform .22s cubic-bezier(.4,.1,.2,1);
    z-index:1200;box-shadow:0 0 48px rgba(16,24,40,.22);
  }
  html.theme-pro body.nf-side-open #proSide{transform:none;}
  html.theme-pro #mainView{margin-left:0!important;left:auto!important;width:auto!important;}
  html.theme-pro .nf-menu-btn{display:inline-flex;}
  html.theme-pro #mainView > main{padding:16px 16px 40px!important;}
  html.theme-pro .nf-topbar{padding:0 14px;gap:8px;}
  html.theme-pro .nf-topright{gap:0;}
  html.theme-pro .nf-clock{display:none;}
}
@media (max-width:560px){
  html.theme-pro #noteGrid.nf-grid,
  html.theme-pro #nfPinned{grid-template-columns:1fr;gap:12px;}
  html.theme-pro .nf-card{min-height:0;}
  html.theme-pro .nf-page-head{margin-bottom:14px;}
  html.theme-pro #mainView > main{padding:14px 12px 32px!important;}
  html.theme-pro .nf-avatar-slot .acc-btn{width:32px;height:32px;}
}
/* ═══════════════════════════════════════════════════════════════════
   14.69 · 세로 폰 툴바의 기존 컴팩트 배치 규칙.
   파일 끝의 23.2 스타일이 이를 덮어쓰며, 현재는 큰 아이콘 + 가로 스크롤 도구줄을 쓴다.
   아래 규칙은 기존 반응형 레이아웃을 위한 기준으로 남겨 둔다.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width:640px) and (orientation:portrait){
  /* ── ① 도구막대: 4줄 전체 노출 → 꼭 필요한 것만 2줄 ── */
  .editor-toolbar{
    flex-wrap:wrap!important;align-content:flex-start;
    overflow-x:hidden!important;overflow-y:visible!important;
    touch-action:manipulation!important;
    row-gap:3px;min-height:0!important;
  }
  .editor-toolbar .tb-left{order:1;flex:1 1 auto;min-width:0;}
  .editor-toolbar .tb-right{order:2;flex:0 0 auto;flex-wrap:nowrap;}
  .editor-toolbar .tb-mid{
    order:3;flex:1 1 100%;min-width:100%;
    flex-wrap:wrap;justify-content:center;row-gap:3px;gap:3px;
    padding-top:3px;margin-top:1px;border-top:1px solid var(--border);
  }
  /* 2줄 읽는 순서: 넣기 → 그리기 │ 서식 (DOM 순서만 바꾸고 내용은 그대로) */
  .editor-toolbar .tb-mid .insert-group{order:1;}
  .editor-toolbar .tb-mid .draw-group{order:2;}
  .editor-toolbar .tb-mid .tb-sep-ph{order:3;height:20px;margin:0 3px;}
  .editor-toolbar .tb-mid .fmt-group{order:4;flex-wrap:nowrap;max-width:100%;}
  /* 세로 폰에서는 툴바를 두 줄로 유지해 편집 영역을 확보한다. */
  .editor-toolbar .tb-hide-ph{display:none!important;}
  /* 1줄: 제목 · 되돌리기/다시실행 · 더보기 (버튼 38px) */
  .editor-toolbar .tb-left .tool-btn,
  .editor-toolbar .tb-right .tool-btn{
    width:38px!important;min-width:38px;height:38px!important;min-height:38px;
  }
  .editor-toolbar #edTitle{
    flex:1 1 auto!important;width:auto!important;min-width:0!important;
    min-height:38px;font-size:16px!important;
  }
  .editor-toolbar #saveState{display:none!important;}
  /* 2줄: 콤팩트하지만 손가락이 눌리는 31~34px */
  .editor-toolbar .tb-mid .tool-btn{
    width:34px!important;min-width:34px;height:34px!important;min-height:34px;
    font-size:17px!important;border-radius:9px;
  }
  .editor-toolbar .tb-mid .tool-btn.sm{
    width:31px!important;min-width:31px;height:31px!important;min-height:31px;
    font-size:15px!important;
  }
  .editor-toolbar .tb-mid .split-btn{height:32px;}
  .editor-toolbar .tb-mid .split-btn .main{min-width:27px;width:27px;height:32px;}
  .editor-toolbar .tb-mid .split-btn .caret{width:14px;height:32px;}
  .editor-toolbar .tb-mid .tb-group{flex-wrap:nowrap;max-width:100%;}

  /* ── ③ 그리기 도구막대: 가로 스크롤 → 전체 노출 줄바꿈 (14.68 유지) ── */
  .draw-toolbar{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    top:calc(var(--sdy-edbar-bottom, 64px) + 8px)!important;bottom:auto!important;
    width:auto!important;max-width:none!important;transform:none!important;
    overflow-x:hidden!important;overflow-y:auto!important;
    flex-wrap:wrap;justify-content:center;row-gap:8px;
    padding:9px 10px!important;gap:8px;
    max-height:44dvh;z-index:1350!important;
    touch-action:manipulation!important;
    border-radius:16px;overscroll-behavior:contain;
  }
  .draw-toolbar .color-pick{width:32px;height:32px;min-width:32px;}
  .draw-toolbar .tool-btn{width:38px!important;height:38px!important;min-width:38px;}
  /* 15.30 · 굵기 버튼: 모바일에서도 전부 같은 크기의 넓은 터치 영역(34px) */
  .draw-toolbar .size-opt{width:34px;height:34px;min-width:34px;min-height:34px;}
  .draw-toolbar .size-opt::after{width:calc(var(--d,8px) + 3px);height:calc(var(--d,8px) + 3px);}
  .draw-toolbar .size-opt.sel{outline-offset:1px;}
  .draw-toolbar .tool-sep{height:26px;margin:0;}
  .draw-toolbar .palm-btn.active{background:var(--accent);color:#fff;box-shadow:0 2px 6px rgba(79,110,247,.35);}

  /* ── ④ 그리기 도구막대가 열려 있는 동안 본문 하단 여백 ── */
  /* 15.42.16 · 윗 여백(padding-top)은 색상판이 열려도 바꾸지 않는다 — 화면이
     색상판 높이만큼 내려가는 문제를 없앴다. 아랫 여백만 열림 상태에서 늘린다. */
  .editor:has(#drawToolbar[style*="flex"]) .editor-body{
    padding-bottom:calc(var(--ph-safe) + 190px)!important;
  }
  .editor.focus-on .editor-body{padding-top:max(10px,var(--ph-top))!important;}

  /* ── ⑤ 빠른 메뉴는 세로 폰에서 바닥 시트 ── */
  .more-panel{
    top:auto!important;bottom:0!important;left:0!important;right:0!important;
    width:100%!important;max-width:none!important;
    max-height:min(72dvh,calc(var(--sdy-mobile-vh,100dvh) - 120px));
    border-radius:16px 16px 0 0!important;
    padding-bottom:max(8px,env(safe-area-inset-bottom));
    animation:sheetUp .18s cubic-bezier(.4,0,.2,1);
  }
  @keyframes sheetUp{from{transform:translateY(12px);opacity:.55}to{transform:none;opacity:1}}

  /* 16.3 Samsung Music fidelity: phone/windowed player keeps the same visual details. */
  #musicPlayer.mp-bar{padding:6px 8px!important;gap:7px!important;}
  #musicPlayer.mp-bar .mp-cover{width:36px!important;height:36px!important;border-radius:50%!important;}
  #musicPlayer.mp-bar .mp-title{font-size:12px;}
  #musicPlayer.mp-bar .mp-sub{font-size:10px;}
  #musicPlayer.mp-bar .mp-btns button,#musicPlayer.mp-bar #mpX{width:29px;height:30px;font-size:14px;}
  #musicPlayer.mp-bar .mp-btns .mp-pp{width:32px!important;height:32px!important;font-size:16px!important;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap,
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-cwrap .mpb-cover{
    width:min(56vw,210px)!important;height:min(56vw,210px)!important;margin:0 auto;
  }
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-meta{padding-top:11px;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-title{font-size:16.5px!important;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-actions{margin-top:12px;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl{margin-top:31px;}
  #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl button{width:42px;height:42px;}
  html body #mpBig:not(.mpb-fs):not(:fullscreen):not(:-webkit-full-screen) .mpb-ctl .pp{
    width:50px!important;height:50px!important;font-size:25px!important;
  }
}

/* 앱 내부 토스트 숨김 — 사용자 요청: 알림 지저분함 제거 */
#toast, .toast, .toast.show{ display:none !important; opacity:0 !important; visibility:hidden !important; pointer-events:none !important; }


/* 사이트 전반 지저분한 설명 숨김 — 사용자 요청: 구질구질한 안내 싹 제거 (미니멀) */
.set-row .dim, .set-label .dim,
.nf-flash-hint,
.tblsize-hint,
.cd-tip-item,
.cd-keyhints,
.cd-hint, #cdHint, #cdHintBtn, .cd-hintbtn,
.hint, #mpTagHint, #fcHint,
.notif-empty, #notifList .notif-empty,
.yp-empty,
.tg-placeholder,
.tg-label em, .tg-label kbd,
#buglog .modal-box > div[style*="font-size:11.5px"],
#createModal .modal-box p.tblsize-hint,
#trashModal div[style*="font-size:11px"],
#exportModal div[style*="font-size:11px"],
#folderNameHint,
#stgTxt, #vaultProgTxt, #vaultCount, #bugCount {
  display: none !important;
}

/* 사용자 요청: 다중 선택 시 왼쪽 위 체크 버튼 숨김 — 파란 테두리만으로 구분 */
.note-card .select-check,
.note-card.selected .select-check,
html.theme-pro .nf-card .select-check,
html.theme-pro .nf-card.selected .select-check,
html.theme-pro .select-mode .nf-card .select-check { display: none !important; }

/* 사용자 요청: 텍스트상자·표·그림 등 손잡이는 평소 숨기고, 마우스를 가져간 위치의 손잡이만 보이게 */
.handle,
.tb-move,
.el-del,
.latex-box .latex-edit {
  transition: opacity .14s !important;
}
/* 선택됐을 때도 기본은 숨김 — 호버·근접(.near) 시에만 해당 손잡이 표시 */
.paper-img.sel .handle,
.tb.sel .handle,
.tb.edit .handle,
.latex-box.sel .handle,
.latex-box.msel .handle,
.tb.msel .handle,
.paper-img.msel .handle {
  display: block !important;
  opacity: 0 !important;
  pointer-events: auto !important;
}
.tb.in-tbl .handle,
.paper-img.math .handle,
.paper-img.pdf-bg .handle {
  display: none !important;
}
.tb.sel .tb-move, .tb.edit .tb-move,
.paper-img.sel .el-del, .tb.sel .el-del, .tb.edit .el-del,
.latex-box.sel .latex-edit {
  display: flex !important;
  opacity: 0 !important;
  pointer-events: auto !important;
}
.handle:hover,
.handle.near,
.tb-move:hover,
.el-del:hover,
.latex-box .latex-edit:hover {
  opacity: 1 !important;
}
.paper-img.sel .handle:hover,
.paper-img.sel .handle.near,
.tb.sel .handle:hover,
.tb.sel .handle.near,
.tb.edit .handle:hover,
.tb.edit .handle.near,
.latex-box.sel .handle:hover,
.latex-box.sel .handle.near,
.latex-box.msel .handle:hover,
.latex-box.msel .handle.near,
.tb.msel .handle:hover,
.tb.msel .handle.near,
.paper-img.msel .handle:hover,
.paper-img.msel .handle.near,
.tb.sel .tb-move:hover,
.tb.edit .tb-move:hover,
.paper-img.sel .el-del:hover,
.tb.sel .el-del:hover,
.tb.edit .el-del:hover,
.latex-box.sel .latex-edit:hover {
  opacity: 1 !important;
}
#pagesStage[data-hdl-cur="nwse"], #pagesStage[data-hdl-cur="nwse"] * { cursor: nwse-resize !important; }
#pagesStage[data-hdl-cur="nesw"], #pagesStage[data-hdl-cur="nesw"] * { cursor: nesw-resize !important; }
#pagesStage[data-hdl-cur="ew"],   #pagesStage[data-hdl-cur="ew"] *   { cursor: ew-resize !important; }
#pagesStage[data-hdl-cur="ns"],   #pagesStage[data-hdl-cur="ns"] *   { cursor: ns-resize !important; }
/* 표: near/on 상태에서도 기본 숨김, 해당 손잡이에 호버 시에만 표시 */
.tbl-box.near .tbl-h, .tbl-box.on .tbl-h,
.tbl-box.near .tbl-stretch, .tbl-box.on .tbl-stretch {
  opacity: 0 !important;
}
.tbl-box.near .tbl-h:hover, .tbl-box.on .tbl-h:hover,
.tbl-box.near .tbl-stretch:hover, .tbl-box.on .tbl-stretch:hover {
  opacity: 1 !important;
}
/* 터치 기기에서는 호버가 없으므로 선택 시 손잡이 항상 표시 */
@media (pointer: coarse) {
  .handle { --hdl-sz: max(var(--hs, 16px), calc(18px / var(--pz, 1))); }
  .paper-img.sel .handle, .tb.sel .handle, .tb.edit .handle,
  .latex-box.sel .handle, .tb.msel .handle, .paper-img.msel .handle,
  .tb.sel .tb-move, .tb.edit .tb-move,
  .paper-img.sel .el-del, .tb.sel .el-del,
  .tbl-box.near .tbl-h, .tbl-box.on .tbl-h,
  .tbl-box.near .tbl-stretch, .tbl-box.on .tbl-stretch {
    opacity: 1 !important;
  }
}

/* 뒤로가기 등 리프레시 깜빡임 숨김 — 화면이 하얗게 번쩍이던 것 방지 */
html, body, #mainView, #noteGrid, #editorView {
  background: var(--bg) !important;
}
/* 페이지 사이·종이 밖 빈 칸은 에디터 캔버스와 같은 회색으로 유지한다. */
#pagesStage {
  background: var(--editor-canvas) !important;
}
#edLoading {
  background: color-mix(in srgb, var(--bg) 96%, transparent) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
#noteGrid, #pagesStage, #editorView {
  transform: translateZ(0);
  backface-visibility: hidden;
}
#syncBar {
  opacity: 0 !important;
  pointer-events: none !important;
  transition: opacity .2s !important;
}
#syncBar.on {
  opacity: 0 !important;
}

/* 23.1 · 편집기 빠른 메뉴 — 어두운 에디터 캔버스와 한 톤으로 어우러지는 다크 카드·섹션 스타일 */
#moreSheet.more-sheet{
  background:var(--qm-scrim);
}
.more-panel-quick{
  --card:var(--qm-tile);
  --bg2:var(--qm-icon-bg);
  --border:var(--qm-border);
  --text1:var(--qm-ink);
  --text2:var(--qm-ink2);
  --text3:var(--qm-ink3);
  --accent:var(--qm-accent);
  color-scheme:dark;
  width:min(400px,calc(100vw - 24px));
  max-height:min(78vh,690px);
  border:1px solid var(--qm-border-strong)!important;
  border-radius:18px!important;
  background:var(--qm-bg)!important;
  color:var(--qm-ink);
  backdrop-filter:blur(18px) saturate(140%);-webkit-backdrop-filter:blur(18px) saturate(140%);
  box-shadow:var(--qm-shadow)!important;
}
html.theme-pro #moreSheet .more-panel-quick{
  border-radius:18px!important;
  box-shadow:var(--qm-shadow)!important;
}
.quick-section-copy{display:flex;flex-direction:column;min-width:0;}
.more-body-quick{
  display:flex;flex-direction:column;gap:10px;
  padding:12px;overflow-y:auto;overscroll-behavior:contain;
}
.quick-section{
  min-width:0;padding:11px;
  border:1px solid var(--qm-border);
  border-radius:14px;
  background:var(--qm-section);
}
.quick-section-head{display:flex;align-items:center;gap:9px;margin:0 1px 9px;}
.quick-section-mark{
  width:30px;height:30px;flex:none;display:grid;place-items:center;
  border:1px solid color-mix(in srgb,var(--qm-accent) 26%,var(--qm-border));
  border-radius:9px;background:color-mix(in srgb,var(--qm-accent) 15%,var(--qm-tile));
  color:var(--qm-accent);font-size:15px;
}
.quick-section-copy strong{font-size:12px;line-height:1.25;color:var(--qm-ink);font-weight:800;}
.quick-section-copy small{margin-top:2px;font-size:10px;line-height:1.25;color:var(--qm-ink3);}
.more-quick-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;}
.more-quick-grid-2{grid-template-columns:repeat(2,minmax(0,1fr));}
.more-quick-action{
  min-width:0;min-height:70px;padding:8px 5px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  border:1px solid var(--qm-border);
  border-radius:11px;background:var(--qm-tile);color:var(--qm-ink2);
  cursor:pointer;font:inherit;font-size:11px;font-weight:700;line-height:1.18;text-align:center;
  transition:background .15s,border-color .15s,color .15s,transform .12s,box-shadow .15s;
}
.more-quick-icon{
  width:29px;height:29px;flex:none;display:grid;place-items:center;
  border-radius:9px;background:var(--qm-icon-bg);color:var(--qm-ink2);
  transition:background .15s,color .15s;
}
.more-quick-icon i{font-size:16px;line-height:1;}
.more-quick-action>span:last-child,.more-quick-label{max-width:100%;overflow-wrap:anywhere;}
.more-quick-action:hover{
  border-color:color-mix(in srgb,var(--qm-accent) 42%,var(--qm-border));
  background:var(--qm-tile-hover);color:var(--qm-ink);
}
.more-quick-action:hover .more-quick-icon{background:color-mix(in srgb,var(--qm-accent) 18%,var(--qm-icon-bg));color:var(--qm-accent);}
.more-quick-action:active{transform:scale(.97);}
.more-quick-action:focus-visible{outline:2px solid color-mix(in srgb,var(--qm-accent) 65%,transparent);outline-offset:2px;}
.more-quick-action.active{
  border-color:color-mix(in srgb,var(--qm-accent) 48%,var(--qm-border));
  background:color-mix(in srgb,var(--qm-accent) 16%,var(--qm-tile));color:var(--qm-accent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--qm-accent) 10%,transparent);
}
.more-quick-action.active .more-quick-icon{background:color-mix(in srgb,var(--qm-accent) 22%,var(--qm-icon-bg));color:var(--qm-accent);}
.more-quick-action.has-favorites{
  border-color:var(--qm-fav-border);
  background:var(--qm-fav-bg);color:var(--qm-ink);
}
.more-quick-action.has-favorites .more-quick-icon{
  background:var(--qm-fav-icon-bg);color:var(--qm-fav-ink);
}

/* ── 15.32 · 편집창 빠른 메뉴의 켜기/끄기 — 아이폰 설정의 토글 스위치 ────────
   집중·격자·눈 편한 색·이 쪽 즐겨찾기·동시편집은 '상태'를 말하는 버튼이라
   아이폰 스위치(초록=켜짐 · 회색=꺼짐 · 흰 손잡이)로 통일한다. */
.more-quick-rows{
  display:flex;flex-direction:column;overflow:hidden;
  border:1px solid var(--qm-border);
  border-radius:11px;background:var(--qm-tile);
}
.more-quick-rows + .more-quick-grid,.more-quick-grid + .more-quick-rows{margin-top:7px;}
.more-quick-toggle{
  width:100%;min-height:50px;padding:8px 12px;border:0;border-radius:0;
  flex-direction:row;align-items:center;justify-content:flex-start;gap:10px;
  background:var(--qm-tile);color:var(--qm-ink);text-align:left;
}
.more-quick-toggle + .more-quick-toggle{
  border-top:1px solid var(--qm-divider);
}
.more-quick-toggle:hover{background:var(--qm-tile-hover);border-color:transparent;}
.more-quick-toggle:active{transform:none;}
.more-quick-toggle .more-quick-label{flex:1 1 auto;font-size:12.5px;font-weight:700;color:var(--qm-ink);}
.more-quick-toggle.active{background:var(--qm-tile);color:var(--qm-ink);box-shadow:none;border-color:transparent;}
.more-quick-toggle.active .more-quick-icon{
  background:var(--qm-on-icon-bg);color:var(--qm-on-icon-ink);
}
.more-quick-toggle.active + .more-quick-toggle{border-top-color:var(--qm-divider);}
.more-quick-grid-solo{grid-template-columns:minmax(0,1fr);}
/* 아이폰 토글 — 51×31 트랙 + 27 흰 손잡이 (켜짐 #34C759) */
.ios-switch{
  width:51px;height:31px;flex:none;position:relative;display:block;
  border-radius:999px;background:var(--qm-switch-off);
  box-shadow:inset 0 0 0 1px var(--qm-border);
  transition:background .22s ease;
}
.ios-switch>b{
  position:absolute;left:2px;top:2px;width:27px;height:27px;border-radius:50%;
  background:var(--qm-knob);display:block;
  box-shadow:0 2px 5px rgba(0,0,0,.34),0 1px 2px rgba(0,0,0,.18);
  transition:transform .22s cubic-bezier(.32,.9,.36,1);
}
.more-quick-toggle.active .ios-switch,
.more-quick-toggle[aria-pressed="true"] .ios-switch{background:var(--qm-switch-on);}
.more-quick-toggle.active .ios-switch>b,
.more-quick-toggle[aria-pressed="true"] .ios-switch>b{transform:translateX(20px);}
/* 빠른 메뉴에서 여는 보조 팝오버(즐겨찾는 쪽 · 페이지 색)도 같은 다크 톤 */
#favPop,#tintPop{
  --card:var(--qm-tile);
  --bg2:var(--qm-tile-hover);
  --border:var(--qm-border-strong);
  --text1:var(--qm-ink);
  --text2:var(--qm-ink2);
  --text3:var(--qm-ink3);
  --accent:var(--qm-accent);
  background:var(--qm-bg)!important;
  border:1px solid var(--qm-border-strong)!important;
  border-radius:14px!important;
  color:var(--qm-ink);
  box-shadow:var(--qm-shadow)!important;
}
#tintPop .tint-opt[onclick="setTint('')"] span{background:var(--qm-white-swatch)!important;}
@media(max-width:640px){
  .more-panel-quick,
  html.theme-pro #moreSheet .more-panel-quick{
    width:100%!important;max-height:min(78dvh,calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - 18px))!important;
    border-radius:20px 20px 0 0!important;
  }
  .more-body-quick{gap:9px;padding:10px 12px max(14px,env(safe-area-inset-bottom));}
  .quick-section{padding:10px;}
  .more-quick-action{min-height:68px;font-size:11px;}
  .more-quick-toggle{min-height:54px;padding:9px 12px;font-size:12px;}
  .more-quick-toggle .more-quick-label{font-size:12.5px;}
}
@media(max-width:360px){
  .more-quick-grid{gap:5px;}
  .more-quick-action{min-height:64px;padding:7px 3px;font-size:10.5px;}
}

/* 15.42.12 · 집중 모드 해제용 플로팅 조약돌 버튼 — 상단 바가 숨겨진 동안에만 노출 */
.focus-exit-btn{
  display:none;
  position:absolute;top:10px;right:18px;z-index:1120;
  height:36px;padding:0 13px;gap:6px;
  align-items:center;justify-content:center;
  border:1px solid var(--ed-pebble-border);border-radius:999px;
  background:var(--ed-pebble-bg);color:var(--ed-pebble-ink);
  box-shadow:var(--ed-pebble-shadow);
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  font:inherit;font-size:12px;font-weight:700;line-height:1;letter-spacing:-.01em;
  cursor:pointer;opacity:.88;
  transition:opacity .16s ease,transform .16s ease,background .16s ease,border-color .16s ease,box-shadow .16s ease;
}
.focus-exit-btn i{font-size:16px;line-height:1;}
.focus-exit-btn:hover,
.focus-exit-btn:focus-visible{
  opacity:1;transform:translateY(-1px);
  background:var(--ed-pebble-bg-hover);border-color:var(--ed-pebble-border-hover);
  color:var(--ed-pebble-ink-strong);box-shadow:var(--ed-pebble-shadow-hover);
}
.focus-exit-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 72%,transparent);outline-offset:2px;}
.focus-exit-btn:active{transform:scale(.95);}
.editor.focus-on .focus-exit-btn{display:inline-flex;}
@media(max-width:640px),(max-height:560px) and (pointer:coarse){
  .focus-exit-btn{
    top:max(8px,var(--ph-top));right:max(10px,var(--ph-right));
    min-height:40px;height:40px;padding:0 14px;font-size:12.5px;opacity:.94;
  }
}

/* 23.2 · 에디터 툴바 — 상단 바 배경(#171717) 제거 + 노트 위에 둥글둥글 떠 있는 조약돌(pebble) 버튼 */
.editor-toolbar,
html.theme-pro .editor-toolbar{
  position:absolute!important;top:0;left:0;right:0;z-index:1100;
  background:transparent!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  border:0!important;border-bottom:0!important;
  box-shadow:none!important;
  min-height:0!important;height:auto!important;
  padding:10px 18px 14px!important;
  column-gap:14px!important;row-gap:7px!important;
  align-items:center!important;
  pointer-events:none;
}
.editor-toolbar .tb-left>*,
.editor-toolbar .tb-mid .tb-group,
.editor-toolbar .tb-right>*,
.editor-toolbar button,
.editor-toolbar input{pointer-events:auto;}
.editor-toolbar .tb-left{min-width:0;gap:8px;}
.editor-toolbar .tb-title-wrap,
html.theme-pro .editor-toolbar .tb-title-wrap{
  min-width:0;flex:0 1 auto;display:inline-flex;align-items:center;flex-wrap:nowrap;gap:6px;
  padding:0 12px 0 4px;
  border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;
  background:var(--ed-pebble-bg)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  transition:border-color .16s ease,box-shadow .16s ease,background .16s ease;
}
.editor-toolbar .tb-title-wrap:hover,
html.theme-pro .editor-toolbar .tb-title-wrap:hover,
.editor-toolbar .tb-title-wrap:focus-within,
html.theme-pro .editor-toolbar .tb-title-wrap:focus-within{
  background:var(--ed-pebble-bg-hover)!important;
  border-color:var(--ed-pebble-border-hover)!important;
  box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor-toolbar #edTitle,
html.theme-pro .editor-toolbar #edTitle{
  width:min(22vw,230px)!important;max-width:230px!important;min-width:90px!important;
  height:36px!important;padding:0 10px!important;
  color:var(--ed-pebble-ink)!important;font-size:13px!important;font-weight:650!important;
}
/* 제목은 입력 상자 대신 조약돌 캡슐 안 글자만 보이게 한다. hover/focus도 같은 배경. */
#editorView .editor-toolbar #edTitle{
  appearance:none;
  background:transparent!important;border:0!important;border-radius:0!important;
  box-shadow:none!important;outline:none!important;
}
/* 키보드 초점은 상자 없이 글자 밑줄만으로 구분한다. */
#editorView .editor-toolbar #edTitle:focus-visible{
  text-decoration:underline;text-underline-offset:4px;
}
.editor-toolbar #saveState{
  font-size:10.5px!important;font-weight:600!important;letter-spacing:.01em;
  color:var(--ed-pebble-ink3)!important;
}
.editor-toolbar .tb-mid{
  min-width:0;align-items:center;justify-content:center;flex-wrap:wrap;
  gap:8px!important;
}
.editor-toolbar .tb-right{min-width:0;align-items:center;gap:7px!important;}
.editor-toolbar .tb-group,
html.theme-pro .editor-toolbar .tb-group{
  position:relative;display:flex;align-items:center;gap:5px!important;
  padding:0!important;border:0!important;border-radius:999px!important;
  background:transparent!important;box-shadow:none!important;
}
.editor-toolbar .tb-mid>.tool-sep,
.editor-toolbar .tool-sep{
  display:none!important;
}
.editor-toolbar .tool-btn,
html.theme-pro .editor-toolbar .tool-btn,
html.theme-pro .editor-toolbar .tool-btn.sm{
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
  flex:none;width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;
  padding:0!important;border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;
  background:var(--ed-pebble-bg)!important;color:var(--ed-pebble-ink)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  font-size:20px!important;line-height:1!important;
  transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease,box-shadow .16s ease!important;
}
.editor-toolbar .tool-btn i,
.editor-toolbar .split-btn .main{font-size:21px!important;line-height:1!important;}
.editor-toolbar .ed-icon{
  display:block;flex:none;width:22px;height:22px;overflow:visible;
  fill:none;stroke:currentColor;stroke-width:1.85;stroke-linecap:round;stroke-linejoin:round;
}
.editor-toolbar .tb-mid .ed-icon{width:22px;height:22px;}
.editor-toolbar .tool-btn:hover,
html.theme-pro .editor-toolbar .tool-btn:hover{
  transform:translateY(-1.5px)!important;border-color:var(--ed-pebble-border-hover)!important;
  background:var(--ed-pebble-bg-hover)!important;color:var(--ed-pebble-ink-strong)!important;
  box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor-toolbar .tool-btn:active{transform:scale(.94)!important;}
.editor-toolbar .tool-btn:focus-visible{
  outline:2px solid color-mix(in srgb,var(--accent) 72%,transparent)!important;outline-offset:2px!important;
}
.editor-toolbar .tool-btn.active,
html.theme-pro .editor-toolbar .tool-btn.active{
  background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#fff 12%),var(--accent))!important;
  border-color:color-mix(in srgb,var(--accent) 78%,#0f172a 22%)!important;
  color:#fff!important;
  box-shadow:0 6px 16px -3px color-mix(in srgb,var(--accent) 44%,transparent),inset 0 1px 0 rgba(255,255,255,.35)!important;
}
.editor-toolbar .tool-btn:disabled,
html.theme-pro .editor-toolbar .tool-btn:disabled{
  opacity:.46!important;transform:none!important;cursor:default!important;
}
.editor-toolbar .fmt-group{--tb-hover:var(--ed-pebble-fmt-hover);--tb-hover-ink:var(--ed-pebble-fmt-ink);}
.editor-toolbar .insert-group{--tb-hover:var(--ed-pebble-insert-hover);--tb-hover-ink:var(--ed-pebble-insert-hover-ink);}
.editor-toolbar .draw-group{--tb-hover:var(--ed-pebble-draw-hover);--tb-hover-ink:var(--ed-pebble-draw-hover-ink);}
.editor-toolbar .find-group{--tb-hover:var(--ed-pebble-find-hover);--tb-hover-ink:var(--ed-pebble-find-hover-ink);}
.editor-toolbar .tb-mid .tb-group .tool-btn:not(.active):hover{
  background:var(--tb-hover)!important;border-color:color-mix(in srgb,var(--tb-hover-ink) 24%,var(--ed-pebble-border))!important;
  color:var(--tb-hover-ink)!important;box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor-toolbar .font-btn,
html.theme-pro .editor-toolbar .font-btn{
  display:flex;align-items:center;justify-content:center;gap:7px;text-align:center;
  width:145px;max-width:145px;height:40px!important;min-height:40px;padding:0 13px!important;
  border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;
  background:var(--ed-pebble-bg)!important;color:var(--ed-pebble-ink)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  font-size:12px!important;font-weight:650!important;
  transition:background .16s ease,border-color .16s ease,transform .16s ease,box-shadow .16s ease;
}
.editor-toolbar .font-btn:hover{
  transform:translateY(-1px);
  background:var(--ed-pebble-bg-hover)!important;border-color:var(--ed-pebble-border-hover)!important;
  box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor-toolbar .font-btn i{font-size:17px;color:var(--ed-pebble-ink3);}
.editor-toolbar #fontLabel{display:block;width:100%;font-family:inherit;color:inherit!important;text-align:center;}
/* 되돌리기/다시 실행은 버튼과 SVG 상자를 중앙 정렬한다.
   눈에 보이는 곡선 아이콘의 아래쪽 치우침은 symbol viewBox 에서 바로 보정한다. */
.editor-toolbar #undoBtn,.editor-toolbar #redoBtn{display:grid!important;place-items:center!important;}
.editor-toolbar #undoBtn .ed-icon,.editor-toolbar #redoBtn .ed-icon{margin:auto!important;}
.editor-toolbar #fsInput,
html.theme-pro .editor-toolbar #fsInput{
  width:50px!important;height:40px!important;min-height:40px!important;padding:0 6px!important;
  border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;
  background:var(--ed-pebble-bg)!important;color:var(--ed-pebble-ink)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  font-size:13px!important;font-weight:700!important;text-align:center!important;
  transition:background .16s ease,border-color .16s ease,box-shadow .16s ease;
}
.editor-toolbar #fsInput:hover,
.editor-toolbar #fsInput:focus{
  background:var(--ed-pebble-bg-hover)!important;border-color:var(--ed-pebble-border-hover)!important;
  box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor-toolbar .split-btn,
html.theme-pro .editor-toolbar .split-btn{
  height:40px!important;align-items:center;gap:0;
  border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;
  background:var(--ed-pebble-bg)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  overflow:hidden;
  transition:border-color .16s ease,transform .16s ease,box-shadow .16s ease;
}
.editor-toolbar .split-btn:hover,
html.theme-pro .editor-toolbar .split-btn:hover{
  transform:translateY(-1px);border-color:var(--ed-pebble-border-hover)!important;
  box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor-toolbar .split-btn .main,
html.theme-pro .editor-toolbar .split-btn .main{
  width:36px!important;min-width:36px!important;height:38px!important;min-height:38px!important;
  display:flex;align-items:center;justify-content:center;gap:0;padding:0 0 0 2px!important;
  border:0!important;border-radius:999px 0 0 999px!important;
  background:transparent!important;color:var(--ed-pebble-ink)!important;
}
.editor-toolbar .split-btn .main:hover,
html.theme-pro .editor-toolbar .split-btn .main:hover{background:var(--ed-pebble-subtle)!important;}
/* 15.56.1 · 글자색·형광펜 단추 — 옆의 굵게·기울임·밑줄·취소선과 '한 벌'로 보이게 한다.
   ① 크기: 단추(.main)의 font-size 는 옆 글리프(.tool-btn i)와 **같은 규칙**에 묶여 있다
      (21px 기본 · 19px/17px 데스크톱 · 22px 터치 — 이 파일에서 '.tool-btn i,' 로 검색).
      글리프(.glyph)와 SVG(.ed-icon)는 그 값을 1em 으로 그대로 받는다. 예전에는 18px 로
      못박혀 있어 화면 폭에 따라 옆 글리프(17~22px)보다 작거나 컸다.
   ② 색: 글리프는 늘 단추의 잉크색(= 옆 글리프와 같은 색)이다. 고른 글자색은 아래 띠만
      보여 준다 — JS 가 #tcGlyph 에 인라인으로 써 넣는 color 는 여기서 일부러 덮는다
      (밝은 색을 고르면 글리프가 사라지고, 다크 모드에서는 기본 검정이 안 보였다).
   ③ 색 띠: 글리프의 기준선(위에서 .75em = 24 격자의 y=18) 2px 아래에 3px 두께로 놓는다.
      너비 .75em 은 Remix 'font-color' 글리프에 붙어 있던 색 띠의 길이(18/24)와 같다.
      margin-top  = 2px − .25em  → 글리프 상자 바닥(1em)에서 기준선 아래 2px 로 끌어올린다.
      margin-bottom = .25em − 5px → 띠가 차지한 높이(위 여백 + 3px)를 0 으로 되돌린다.
      그래서 세로로 가운데 놓이는 것은 정확히 1em 글리프 상자 하나 — 옆 글리프와 중심·기준선이
      같고, 띠는 그 아래 여백에 '얹힐' 뿐 글리프를 밀어 올리지 않는다. */
.editor-toolbar .split-btn .main .glyph{display:flex;align-items:center;justify-content:center;
  font-size:1em!important;color:inherit!important;}
.editor-toolbar .split-btn .main .ed-icon{width:1em!important;height:1em!important;}
.editor-toolbar .split-btn .bar{width:.75em;height:3px;margin:calc(2px - .25em) 0 calc(.25em - 5px);border-radius:1px;}
.editor-toolbar .split-btn .caret,
html.theme-pro .editor-toolbar .split-btn .caret{
  width:24px!important;min-width:24px!important;height:38px!important;min-height:38px!important;
  border:0!important;border-left:1px solid var(--ed-pebble-border)!important;border-radius:0 999px 999px 0!important;
  background:transparent!important;color:var(--ed-pebble-ink3)!important;font-size:13px!important;
}
.editor-toolbar .split-btn .caret:hover,
html.theme-pro .editor-toolbar .split-btn .caret:hover{
  background:var(--ed-pebble-subtle)!important;color:var(--ed-pebble-ink-strong)!important;
}
.editor-toolbar .tool-sep{display:none!important;}
/* 페이지 이동 — 왼쪽 이전(←) · 중앙 현재/전체 쪽 · 오른쪽 다음(→).
   같은 크기의 둥근 화살표 사이에 숫자를 놓아 조약돌 캡슐의 정중앙에 표시한다.
   .editor 를 포함한 선택자로 예전 툴바·반응형 크기 규칙보다 우선한다. */
.editor .editor-toolbar .pg-nav,
html.theme-pro .editor .editor-toolbar .pg-nav{
  display:flex;flex-direction:row!important;align-items:center!important;justify-content:center!important;flex:none;
  width:auto!important;min-width:142px!important;height:40px!important;min-height:40px!important;
  padding:3px 4px!important;gap:2px!important;
  border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;overflow:visible!important;
  background:var(--ed-pebble-bg)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
  transition:border-color .16s ease,box-shadow .16s ease,background .16s ease;
}
.editor .editor-toolbar .pg-nav:hover,
html.theme-pro .editor .editor-toolbar .pg-nav:hover{
  background:var(--ed-pebble-bg-hover)!important;border-color:var(--ed-pebble-border-hover)!important;
  box-shadow:var(--ed-pebble-shadow-hover)!important;
}
.editor .editor-toolbar .pg-nav button,
html.theme-pro .editor .editor-toolbar .pg-nav button{
  display:grid!important;place-items:center!important;flex:none;
  width:32px!important;min-width:32px!important;height:32px!important;min-height:32px!important;
  padding:0!important;border:1px solid transparent!important;border-radius:999px!important;
  background:transparent!important;color:var(--ed-pebble-ink)!important;
  box-shadow:none!important;transition:background .16s,border-color .16s,color .16s,transform .12s,box-shadow .16s!important;
}
.editor .editor-toolbar .pg-nav button:hover,
html.theme-pro .editor .editor-toolbar .pg-nav button:hover{
  background:var(--ed-pebble-fmt-hover)!important;
  border-color:color-mix(in srgb,var(--accent) 20%,transparent)!important;color:var(--ed-pebble-fmt-ink)!important;
  transform:translateY(-1px);
}
.editor .editor-toolbar .pg-nav button:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 70%,transparent);outline-offset:1px;}
.editor .editor-toolbar .pg-nav button:active{transform:scale(.94)!important;}
.editor .editor-toolbar .pg-nav .ed-icon{display:block;width:18px;height:18px;margin:auto;stroke-width:2;}
.editor .editor-toolbar .pg-nav-status{
  display:flex;align-items:center;justify-content:center;flex:1 0 auto;width:auto;min-width:64px;height:32px;min-height:32px;
  gap:4px;padding:0 6px;border:1px solid transparent;border-radius:999px;
  white-space:nowrap;font-variant-numeric:tabular-nums;
  background:transparent;transition:border-color .16s,background .16s;
}
.editor .editor-toolbar .pg-nav-status:focus-within{
  border-color:color-mix(in srgb,var(--accent) 42%,transparent);background:var(--ed-pebble-subtle);
  box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 12%,transparent);
}
.editor .editor-toolbar .pg-nav input{
  width:var(--pg-now-width,1ch)!important;min-width:1ch;height:30px!important;padding:0!important;border:0!important;
  background:transparent!important;color:var(--ed-pebble-ink)!important;font-size:12px!important;font-weight:800!important;
  font-variant-numeric:tabular-nums;line-height:30px;text-align:center!important;
}
.editor .editor-toolbar .pg-nav .tot{margin-left:0;font-size:12px!important;font-weight:700;color:var(--ed-pebble-ink3)!important;}
.editor-toolbar .tb-labeled.accent,
html.theme-pro .editor-toolbar .tb-labeled.accent{
  border-radius:999px!important;
  background:linear-gradient(145deg,#7EA3FF,#4E79DF)!important;border-color:rgba(78,121,223,.34)!important;
  color:#fff!important;box-shadow:0 6px 16px -3px rgba(75,112,204,.38),inset 0 1px 0 rgba(255,255,255,.32)!important;
}
.editor-toolbar .tb-labeled.accent:hover,
html.theme-pro .editor-toolbar .tb-labeled.accent:hover{
  transform:translateY(-1.5px)!important;
  background:linear-gradient(145deg,#90B0FF,#5E87E8)!important;
  box-shadow:0 9px 20px -4px rgba(75,112,204,.46),inset 0 1px 0 rgba(255,255,255,.38)!important;
}
/* 15.27 · 아이콘 저장소(svg sprite)는 화면에 그리지 않는다.
   클래스 이름이 .ed-icon-bank 인데 규칙이 .tb-icon-bank 로 걸려 있어서
   너비·높이 지정이 없는 svg 기본 크기(300×150)가 그대로 잡혀 툴바가
   150px 이상 늘어나고, 그 빈 공간이 툴바 배경(검정)으로 길게 보였다. */
.editor-toolbar .ed-icon-bank,
.editor-toolbar .tb-icon-bank{position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;}

@media(max-width:1100px) and (min-width:641px){
  .editor-toolbar{padding:8px 12px 12px!important;column-gap:8px!important;pointer-events:auto;}
  .editor-toolbar .tb-mid{gap:5px!important;pointer-events:auto;}
  .editor-toolbar .tb-right{gap:5px!important;}
  .editor-toolbar .font-btn,html.theme-pro .editor-toolbar .font-btn{width:160px;max-width:160px;}
  .editor-toolbar .tool-btn,html.theme-pro .editor-toolbar .tool-btn,
  html.theme-pro .editor-toolbar .tool-btn.sm{width:38px!important;min-width:38px!important;height:38px!important;min-height:38px!important;}
  .editor .editor-toolbar .pg-nav{min-width:136px!important;height:38px!important;min-height:38px!important;}
  .editor .editor-toolbar .pg-nav-status{height:30px!important;min-height:30px!important;}
  .editor .editor-toolbar .pg-nav button{width:30px!important;min-width:30px!important;height:30px!important;min-height:30px!important;}
  .editor .editor-toolbar .pg-nav input{height:28px!important;line-height:28px;}
}
/* 15.32 · 아이패드(태블릿) 전용 터치 최적화.
   coarse pointer(아이패드)·폰 폭(≤640px)·가로 폰(높이 ≤560px)을 모두 벗어난다.
   데스크톱(pointer:fine)과 폰 규칙은 그대로 둔다.
   에디터 도구막대·그리기 도구막대·페이지 이동칸의 터치 타깃을 44px급으로 키운다. */
@media (min-width:641px) and (min-height:561px) and (pointer:coarse){
  .editor-toolbar{min-height:0;padding:8px 12px 12px!important;gap:8px;pointer-events:auto;}
  .editor-toolbar .tb-mid{pointer-events:auto;}
  .editor-toolbar .tool-btn,
  html.theme-pro .editor-toolbar .tool-btn,
  html.theme-pro .editor-toolbar .tool-btn.sm{
    width:44px!important;min-width:44px!important;height:44px!important;min-height:44px!important;
    border-radius:999px!important;font-size:21px!important;
  }
  .editor-toolbar .tool-btn.sm,
  html.theme-pro .editor-toolbar .tool-btn.sm{
    width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;
  }
  .editor-toolbar .ed-icon{width:24px;height:24px}
  .editor-toolbar .tb-mid .tool-btn i,
  .editor-toolbar .tb-mid .split-btn .main{font-size:22px!important}
  .editor-toolbar #edTitle{font-size:15px;padding:9px 12px;min-height:40px}
  #fsInput{width:48px!important;height:38px!important;font-size:14px}
  .editor .editor-toolbar .pg-nav{min-width:150px!important;height:44px!important;min-height:44px!important;padding:5px 9px!important}
  .editor .editor-toolbar .pg-nav button{width:32px!important;min-width:32px!important;height:32px!important;min-height:32px!important;font-size:16px}
  .editor .editor-toolbar .pg-nav input{width:46px!important;height:34px!important;line-height:34px;font-size:14px}
  .pg-nav .tot{font-size:13px}
  .page-badge{height:34px;padding:0 12px;font-size:13px}
  .tool-sep{height:26px;margin:0 9px}
  /* 세로 도구막대 */
  .side-bar{width:56px}
  .side-btn{width:44px;height:44px;font-size:20px;border-radius:9px}
  .editor.side-off .side-bar{margin-left:-56px}
  /* 펜 그림 도구막대 — 펜(Apple Pencil)·손가락 모두 편한 크기 */
  .draw-toolbar{padding:10px 14px;gap:10px}
  .draw-toolbar .tool-btn{width:44px!important;min-width:44px;height:44px!important;font-size:21px}
  .draw-toolbar .color-pick{width:36px!important;height:36px!important;min-width:36px}
  .draw-toolbar .size-opt{width:38px!important;height:38px!important;min-width:38px;min-height:38px}
  .draw-toolbar .size-opt::after{width:calc(var(--d,8px) + 4px);height:calc(var(--d,8px) + 4px)}
  /* 본문 여백과 페이지 라벨 */
  .editor-body{padding:68px 14px 48px!important}
  .page-label{font-size:12px}
  /* 선택 상자의 이동·삭제 버튼 — 손가락으로 잡기 좋게 */
  .tb-move{width:32px;height:32px;left:-36px;top:-36px;font-size:16px}
  .el-del{width:28px;height:28px;right:-34px;top:-34px;font-size:13px}
}
@media(max-width:820px), (max-height:560px) and (pointer:coarse){
  .editor-toolbar .ed-icon{width:23px;height:23px;}
  .editor-toolbar .tb-mid .tool-btn i,
  .editor-toolbar .tb-mid .split-btn .main{font-size:22px!important;}
}
@media(max-width:640px) and (orientation:portrait){
  .editor-toolbar{
    display:flex!important;flex-wrap:wrap!important;align-content:flex-start!important;
    min-height:0!important;height:auto!important;
    padding:max(6px,var(--ph-top)) max(6px,var(--ph-right)) 8px max(6px,var(--ph-left))!important;
    overflow-x:hidden!important;overflow-y:visible!important;touch-action:manipulation!important;
    pointer-events:none;
    row-gap:4px!important;column-gap:4px!important;
  }
  .editor-toolbar .tb-left{order:1;flex:1 1 auto;min-width:0;gap:5px;}
  .editor-toolbar .tb-right{order:2;flex:0 0 auto;flex-wrap:nowrap;gap:4px!important;}
  .editor-toolbar .tb-mid{
    order:3;flex:1 1 100%;min-width:0!important;max-width:100%;width:100%;
    flex-wrap:nowrap!important;justify-content:flex-start;gap:6px!important;
    margin-top:2px;padding:3px 2px 6px!important;border-top:0!important;
    pointer-events:auto;
    overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    overscroll-behavior-x:contain;scroll-snap-type:x proximity;
  }
  .editor-toolbar .tb-mid::-webkit-scrollbar{display:none;}
  .editor-toolbar .tb-mid>.tool-sep{display:none!important;}
  .editor-toolbar .tb-mid .tb-group{flex:0 0 auto;gap:4px!important;scroll-snap-align:start;}
  .editor-toolbar .tb-mid .fmt-group{order:1;}
  .editor-toolbar .tb-mid .insert-group{order:2;}
  .editor-toolbar .tb-mid .draw-group{order:3;}
  .editor-toolbar .tb-mid .tb-hide-ph{display:none!important;}
  .editor-toolbar .tb-hide-ph{display:none!important;}
  .editor-toolbar .tb-left .tool-btn,
  .editor-toolbar .tb-right .tool-btn,
  html.theme-pro .editor-toolbar .tb-right .tool-btn,
  html.theme-pro .editor-toolbar .tb-left .tool-btn{
    width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;border-radius:999px!important;
  }
  .editor-toolbar .tb-title-wrap,
  html.theme-pro .editor-toolbar .tb-title-wrap{
    flex:1 1 auto;max-width:100%;padding:0 8px 0 4px;
  }
  .editor-toolbar #edTitle,
  html.theme-pro .editor-toolbar #edTitle{
    flex:1 1 auto!important;width:auto!important;max-width:none!important;min-width:0!important;
    height:38px!important;min-height:38px!important;font-size:15px!important;padding:0 8px!important;
  }
  .editor-toolbar #saveState{display:none!important;}
  .editor-toolbar .tb-mid .tool-btn,
  html.theme-pro .editor-toolbar .tb-mid .tool-btn,
  html.theme-pro .editor-toolbar .tb-mid .tool-btn.sm{
    width:42px!important;min-width:42px!important;height:42px!important;min-height:42px!important;
    border-radius:999px!important;font-size:21px!important;
  }
  .editor-toolbar .tb-mid .tool-btn i,
  .editor-toolbar .tb-mid .split-btn .main{font-size:22px!important;}
  .editor-toolbar .tb-mid .ed-icon{width:24px;height:24px;}
  .editor-toolbar .tb-mid .split-btn{height:42px!important;border-radius:999px!important;}
  .editor-toolbar .tb-mid .split-btn .main{width:38px!important;min-width:38px!important;height:40px!important;min-height:40px!important;}
  .editor-toolbar .tb-mid .split-btn .caret{width:26px!important;min-width:26px!important;height:40px!important;min-height:40px!important;}
  .editor-toolbar .tb-right>.tool-sep{display:none!important;}
  .editor-toolbar .tb-right .tb-group{gap:3px!important;}
  .editor-body{padding-top:calc(max(6px,var(--ph-top)) + 98px)!important;}
}
@media(max-width:380px){
  .editor-toolbar{column-gap:2px!important;}
  .editor-toolbar .tb-left .tool-btn,.editor-toolbar .tb-right .tool-btn,
  html.theme-pro .editor-toolbar .tb-right .tool-btn{width:38px!important;min-width:38px!important;height:38px!important;min-height:38px!important;}
  .editor-toolbar .tb-mid{gap:5px!important;}
  .editor-toolbar .tb-mid .tool-btn,html.theme-pro .editor-toolbar .tb-mid .tool-btn,
  html.theme-pro .editor-toolbar .tb-mid .tool-btn.sm{width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;}
}
body.sdy-turbo .editor-toolbar .tb-title-wrap,
body.sdy-turbo .editor-toolbar .tool-btn,
body.sdy-turbo .editor-toolbar .font-btn,
body.sdy-turbo .editor-toolbar #fsInput,
body.sdy-turbo .editor-toolbar .split-btn,
body.sdy-turbo .editor .editor-toolbar .pg-nav,
body.sdy-turbo .draw-toolbar{
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}

/* Soft family accents help scan tool groups while keeping crisp contrast on pebbles. */
.editor-toolbar .insert-group .tool-btn:not(.active){color:var(--ed-pebble-insert-ink)!important;}
.editor-toolbar .draw-group .tool-btn:not(.active){color:var(--ed-pebble-draw-ink)!important;}
.editor-toolbar .find-group .tool-btn:not(.active){color:var(--ed-pebble-find-ink)!important;}
.editor-toolbar button[aria-label="빠른 메뉴"] i{transition:transform .28s cubic-bezier(.2,.8,.2,1);}
.editor-toolbar button[aria-label="빠른 메뉴"]:hover i{transform:rotate(35deg) scale(1.05);}
@media(prefers-reduced-motion:reduce){
  .editor-toolbar .tool-btn,.editor-toolbar .pg-nav button,.editor-toolbar .split-btn .main,.editor-toolbar .split-btn .caret,
  .editor-toolbar button[aria-label="빠른 메뉴"] i{transition:none!important;}
}

/* ── Youpscord · cozy room refresh ───────────────────────────────────
   Keep the existing room controls and message flow, but give the chat a
   calmer, warm-periwinkle lounge that follows the app's light/dark theme. */
#ypApp{
  --yp-shell:#FFFFFF;
  --yp-room:#F6F5F4;
  --yp-room-glow-a:rgba(220,218,255,.52);
  --yp-room-glow-b:rgba(255,222,205,.40);
  --yp-surface:#FFFFFF;
  --yp-surface-soft:#F7F7FA;
  --yp-ink:#292B3A;
  --yp-muted:#83889A;
  --yp-line:#E7E7EE;
  --yp-accent:#7776D7;
  --yp-accent-dark:#6364C4;
  --yp-accent-soft:#F0F0FF;
  --yp-coral:#E98772;
  --yp-voice-a:#F3F1FF;
  --yp-voice-b:#FFF2EB;
  --yp-soft-shadow:rgba(53,48,92,.12);
  width:min(410px,94vw)!important;
  height:min(650px,82vh)!important;
  border:1px solid var(--yp-line)!important;
  border-radius:23px!important;
  background:var(--yp-shell)!important;
  box-shadow:0 24px 70px var(--yp-soft-shadow),0 3px 12px rgba(50,47,76,.08)!important;
  isolation:isolate;
}
html.theme-pro #ypApp{width:min(410px,94vw)!important;height:min(650px,82vh)!important;}
html.theme-dark #ypApp:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #ypApp:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --yp-shell:#272B34;
  --yp-room:#20242B;
  --yp-room-glow-a:rgba(111,103,191,.16);
  --yp-room-glow-b:rgba(181,104,79,.11);
  --yp-surface:#2B3039;
  --yp-surface-soft:#303640;
  --yp-ink:#F0F1F5;
  --yp-muted:#A4ABB7;
  --yp-line:#3C424D;
  --yp-accent:#B5B2FF;
  --yp-accent-dark:#9895F0;
  --yp-accent-soft:#37364B;
  --yp-coral:#FFAD94;
  --yp-voice-a:#302F45;
  --yp-voice-b:#382F34;
  --yp-soft-shadow:rgba(0,0,0,.32);
}
#ypApp .yp-head{
  min-height:58px;padding:8px 13px;gap:8px;
  background:var(--yp-shell)!important;border-bottom:1px solid var(--yp-line)!important;
}
#ypApp .yp-head .yp-ttl{
  gap:10px;font-size:14px;letter-spacing:0;color:var(--yp-ink)!important;
}
#ypApp .yp-head .yp-ttl svg{
  width:34px!important;height:34px!important;padding:7px;border-radius:12px;
  background:linear-gradient(145deg,#FFF1E9,#FFE6DD);color:var(--yp-coral)!important;
  box-shadow:inset 0 0 0 1px rgba(233,135,114,.12);transform:none!important;
}
html.theme-dark #ypApp .yp-head .yp-ttl svg:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #ypApp .yp-head .yp-ttl svg:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#493A3E,#3B374A);
  box-shadow:inset 0 0 0 1px rgba(255,173,148,.12);
}
#ypApp #ypHead button{
  width:36px!important;height:36px!important;border:1px solid transparent!important;
  border-radius:12px!important;background:var(--yp-surface-soft)!important;
  color:var(--yp-muted)!important;font-size:16px!important;
}
#ypApp #ypHead button:hover{
  background:var(--yp-accent-soft)!important;border-color:var(--yp-line)!important;
  color:var(--yp-accent-dark)!important;
}
#ypApp #ypHead .yp-frdot{box-shadow:0 0 0 2px var(--yp-shell)!important;}
#ypApp .yp-voice{
  min-height:56px;padding:9px 13px;gap:8px;
  background:linear-gradient(115deg,var(--yp-voice-a),var(--yp-voice-b))!important;
  border-bottom:1px solid var(--yp-line)!important;
  box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
#ypApp .yp-voice.invoice{
  background:linear-gradient(115deg,var(--yp-voice-a),var(--yp-voice-b))!important;
  box-shadow:inset 3px 0 0 var(--yp-accent)!important;animation:none!important;
}
#ypApp .ypv-join{
  width:36px;height:36px;font-size:16px;
  box-shadow:0 4px 10px rgba(104,99,199,.18);
}
#ypApp .ypv-join.off{
  background:var(--yp-surface)!important;border:1px solid var(--yp-line)!important;
  color:var(--yp-accent-dark)!important;box-shadow:0 2px 7px var(--yp-soft-shadow)!important;
}
#ypApp .ypv-join.loading{background:var(--yp-accent)!important;color:#fff!important;}
#ypApp .ypv-cnt{box-shadow:0 0 0 2px var(--yp-shell),0 2px 6px rgba(35,152,105,.2)!important;}
#ypApp .ypv-icon,#ypApp .ypv-mute,#ypApp .ypv-gear{
  width:36px;height:36px;border:1px solid var(--yp-line)!important;
  background:var(--yp-surface)!important;color:var(--yp-muted)!important;
  font-size:15px;box-shadow:0 2px 6px var(--yp-soft-shadow);
}
#ypApp .ypv-icon:hover,#ypApp .ypv-mute:hover,#ypApp .ypv-gear:hover{
  color:var(--yp-accent-dark)!important;border-color:var(--yp-accent)!important;
  background:var(--yp-accent-soft)!important;transform:none;
}
#ypApp .ypv-icon.on{
  color:#fff!important;background:linear-gradient(135deg,#E99178,#D97883)!important;
  border-color:transparent!important;box-shadow:0 3px 10px rgba(218,120,131,.22)!important;
}
#ypApp .ypv-mute.on{
  color:#fff!important;background:#E77D77!important;border-color:#E77D77!important;
}
#ypApp .yp-vchip{
  background:var(--yp-surface)!important;border-color:var(--yp-line)!important;
  color:var(--yp-muted)!important;box-shadow:0 1px 4px var(--yp-soft-shadow);
}
#ypApp .yp-vchip .nm{color:var(--yp-ink)!important;}
#ypApp .yp-vchip .st{color:var(--yp-muted)!important;}
#ypApp .yp-vchip .st.ok{color:#4DAD88!important;}
#ypApp .yp-bgm{
  padding:9px 12px;gap:8px;flex-wrap:wrap;
  background:var(--yp-surface-soft)!important;border-bottom:1px solid var(--yp-line)!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
#ypApp .yp-bgm-meta b{font-size:11.5px;color:var(--yp-ink)!important;}
#ypApp .yp-bgm-meta span{color:var(--yp-muted)!important;}
#ypApp .yp-bgm input[type=text]{
  background:var(--yp-shell)!important;border:1px solid var(--yp-line)!important;
  color:var(--yp-ink)!important;border-radius:11px;padding:7px 10px;
}
#ypApp .yp-bgm input[type=text]:focus{border-color:var(--yp-accent)!important;}
#ypApp .yp-bgm input[type=text]::placeholder{color:var(--yp-muted)!important;}
#ypApp .yp-bgm input[type=range]{accent-color:var(--yp-accent);}
#ypApp .yp-bgm-res{
  background:var(--yp-shell)!important;border-color:var(--yp-line)!important;
  box-shadow:0 14px 32px var(--yp-soft-shadow)!important;
}
#ypApp .yp-bgm-res button{color:var(--yp-ink)!important;}
#ypApp .yp-bgm-res button:hover{background:var(--yp-accent-soft)!important;}
#ypApp .yp-bgm-res button em,#ypApp .yp-bgm-empty{color:var(--yp-muted)!important;}
#ypApp .yp-body,#ypApp.yp-has-bgm .yp-body{
  margin-top:0!important;padding:15px 14px 14px!important;
  background:
    radial-gradient(ellipse at 8% 4%,var(--yp-room-glow-a),transparent 42%),
    radial-gradient(ellipse at 96% 96%,var(--yp-room-glow-b),transparent 38%),
    var(--yp-room)!important;
  gap:4px;
}
#ypApp .yp-body::-webkit-scrollbar-thumb{background:var(--yp-line)!important;border:2px solid transparent;background-clip:padding-box;}
#ypApp .yp-line{gap:10px;margin-top:13px;}
#ypApp .yp-ava{
  width:34px;height:34px;border:2px solid var(--yp-shell)!important;
  box-shadow:0 3px 8px var(--yp-soft-shadow)!important;
}
#ypApp .yp-stack{max-width:82%;gap:4px;}
#ypApp .yp-who{padding:0 4px;color:var(--yp-muted)!important;font-size:11.5px;}
#ypApp .yp-bub{
  padding:9px 13px;border:1px solid var(--yp-line)!important;
  border-radius:17px 17px 17px 6px!important;
  background:var(--yp-surface)!important;color:var(--yp-ink)!important;
  box-shadow:0 2px 7px var(--yp-soft-shadow)!important;
  font-size:13.5px;line-height:1.55;
}
#ypApp .yp-line.me .yp-bub{
  border-color:transparent!important;border-radius:17px 17px 6px 17px!important;
  background:linear-gradient(135deg,#7375D7,#8A70D3)!important;color:#fff!important;
  box-shadow:0 4px 12px rgba(100,95,195,.22)!important;
}
html.theme-dark #ypApp .yp-line.me .yp-bub:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #ypApp .yp-line.me .yp-bub:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(135deg,#6564B8,#795FB9)!important;
  box-shadow:0 4px 14px rgba(0,0,0,.22)!important;
}
#ypApp .yp-time{color:var(--yp-muted)!important;padding:1px 4px;}
#ypApp .yp-sys{
  margin-top:12px;padding:5px 12px;border:1px solid var(--yp-line)!important;
  background:var(--yp-surface-soft)!important;color:var(--yp-muted)!important;
  box-shadow:0 1px 4px var(--yp-soft-shadow);
}
#ypApp .yp-img{border:2px solid var(--yp-shell)!important;box-shadow:0 4px 12px var(--yp-soft-shadow);border-radius:15px;}
#ypApp .yp-file{
  border-color:var(--yp-line)!important;background:var(--yp-surface)!important;
  color:var(--yp-ink)!important;box-shadow:0 2px 7px var(--yp-soft-shadow);
}
#ypApp .yp-file:hover{border-color:var(--yp-accent)!important;background:var(--yp-accent-soft)!important;}
#ypApp .yp-file .fi{background:var(--yp-accent-soft)!important;color:var(--yp-accent-dark)!important;}
#ypApp .yp-file .fs{color:var(--yp-muted)!important;}
#ypApp .yp-reacts button{
  border-color:var(--yp-line)!important;background:var(--yp-surface)!important;
  color:var(--yp-ink)!important;box-shadow:0 1px 4px var(--yp-soft-shadow);
}
#ypApp .yp-reacts button:hover,#ypApp .yp-reacts button.on{
  border-color:var(--yp-accent)!important;background:var(--yp-accent-soft)!important;
  color:var(--yp-accent-dark)!important;transform:none;
}
#ypApp .yp-del{background:var(--yp-surface)!important;color:var(--yp-muted)!important;box-shadow:0 2px 8px var(--yp-soft-shadow);}
#ypApp .yp-del:hover{background:#E77D77!important;color:#fff!important;}
#ypApp #ypEmpty{
  display:flex!important;flex-direction:column;align-items:center;justify-content:center;
  gap:7px;max-width:310px;margin:auto;padding:24px 18px;
  color:var(--yp-muted)!important;text-align:center;line-height:1.5;
}
#ypApp.yp-has-messages #ypEmpty{display:none!important;}
#ypApp #ypEmpty .yp-empty-art{width:104px;height:84px;display:grid;place-items:center;margin-bottom:3px;}
#ypApp #ypEmpty .yp-empty-art svg{width:100%;height:auto;overflow:visible;filter:drop-shadow(0 8px 12px rgba(77,70,131,.10));}
#ypApp #ypEmpty b{font-size:15px;font-weight:800;color:var(--yp-ink)!important;}
#ypApp #ypEmpty .yp-empty-caption{font-size:12px;color:var(--yp-muted)!important;}
#ypApp #ypEmpty .yp-empty-tags{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin-top:6px;}
#ypApp #ypEmpty .yp-empty-tags span{
  padding:5px 9px;border:1px solid var(--yp-line);border-radius:999px;
  background:var(--yp-surface);color:var(--yp-muted);font-size:10.5px;font-weight:700;
}
#ypApp .yp-foot{
  padding:11px 13px 13px;border-top:1px solid var(--yp-line)!important;
  background:var(--yp-shell)!important;
}
#ypApp .yp-input{gap:8px;}
#ypApp .yp-tools{gap:4px;}
#ypApp .yp-tools button{
  width:36px;height:36px;border:1px solid transparent;
  border-radius:12px;background:var(--yp-surface-soft)!important;
  color:var(--yp-muted)!important;
}
#ypApp .yp-tools button:hover{
  border-color:var(--yp-line);background:var(--yp-accent-soft)!important;
  color:var(--yp-accent-dark)!important;transform:none;
}
#ypApp .yp-draft-chip{
  border-color:var(--yp-line)!important;background:var(--yp-surface-soft)!important;
  box-shadow:0 2px 8px var(--yp-soft-shadow);
}
#ypApp .yp-draft-chip button{background:var(--yp-shell)!important;color:var(--yp-muted)!important;}
#ypApp .yp-input textarea{
  min-height:40px;max-height:104px;padding:9px 12px;
  border:1px solid var(--yp-line)!important;border-radius:15px!important;
  background:var(--yp-surface-soft)!important;color:var(--yp-ink)!important;
  font-size:13.5px!important;line-height:1.45;
}
#ypApp .yp-input textarea:focus{
  border-color:var(--yp-accent)!important;background:var(--yp-shell)!important;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--yp-accent) 16%,transparent)!important;
}
#ypApp .yp-input textarea::placeholder{color:var(--yp-muted)!important;}
#ypApp .yp-send{
  width:40px;height:40px;border-radius:14px;
  background:linear-gradient(145deg,#7778D9,#8C70D4)!important;
  color:#fff!important;box-shadow:0 4px 10px rgba(103,99,196,.24);
}
#ypApp .yp-send:hover{filter:brightness(1.06);transform:translateY(-1px);}
#ypApp .yp-emoji,#ypApp .yp-react-row,#ypApp .yp-settings{
  background:var(--yp-shell)!important;border:1px solid var(--yp-line)!important;
  box-shadow:0 14px 40px var(--yp-soft-shadow)!important;
}
#ypApp .yp-emoji button:hover,#ypApp .yp-react-row button:hover{background:var(--yp-accent-soft)!important;}
#ypApp .yp-settings{top:64px;width:min(270px,88%);border-radius:16px;padding:9px;}
#ypApp .yp-set-title{color:var(--yp-muted)!important;}
#ypApp .yp-set-row{border-radius:10px;}
#ypApp .yp-set-row:hover{background:var(--yp-surface-soft)!important;}
#ypApp .yp-set-row label{color:var(--yp-ink)!important;}
#ypApp .yp-set-row .sub{color:var(--yp-muted)!important;}
#ypApp .yp-set-row input[type=text]{
  background:var(--yp-surface-soft)!important;border-color:var(--yp-line)!important;
  color:var(--yp-ink)!important;border-radius:9px;
}
#ypApp .yp-set-row input[type=text]:focus{border-color:var(--yp-accent)!important;}
#ypApp .yp-switch{background:var(--yp-line)!important;border-color:var(--yp-line)!important;}
#ypApp .yp-switch.on{background:var(--yp-accent)!important;border-color:var(--yp-accent)!important;}
#ypApp .yp-set-btn{background:var(--yp-surface-soft)!important;color:var(--yp-ink)!important;}
#ypApp .yp-set-btn:hover{background:var(--yp-accent-soft)!important;color:var(--yp-accent-dark)!important;}
#ypApp .yp-set-login{
  border-color:var(--yp-line)!important;background:var(--yp-surface-soft)!important;
  color:var(--yp-ink)!important;
}
#ypApp .yp-set-login:hover{border-color:var(--yp-accent)!important;background:var(--yp-accent-soft)!important;color:var(--yp-accent-dark)!important;}
#ypApp .yp-dm-list{
  background:
    radial-gradient(ellipse at 8% 4%,var(--yp-room-glow-a),transparent 42%),
    radial-gradient(ellipse at 96% 96%,var(--yp-room-glow-b),transparent 38%),
    var(--yp-room)!important;
}
#ypApp .yp-dm-list::-webkit-scrollbar-thumb{background:var(--yp-line)!important;}
#ypApp .ypfr-ttl{color:var(--yp-muted)!important;}
#ypApp .ypfr-ttl .cnt{background:var(--yp-accent-soft)!important;color:var(--yp-accent-dark)!important;}
#ypApp .ypfr-add input{
  background:var(--yp-surface)!important;border-color:var(--yp-line)!important;
  color:var(--yp-ink)!important;
}
#ypApp .ypfr-add input::placeholder{color:var(--yp-muted)!important;}
#ypApp .ypfr-item,#ypApp .ypfr-login{
  background:var(--yp-surface)!important;border-color:var(--yp-line)!important;
  color:var(--yp-ink)!important;box-shadow:0 2px 7px var(--yp-soft-shadow);
}
#ypApp .ypfr-item:hover{border-color:var(--yp-accent)!important;}
#ypApp .ypfr-meta b,#ypApp .ypfr-login b{color:var(--yp-ink)!important;}
#ypApp .ypfr-meta span,#ypApp .ypfr-empty{color:var(--yp-muted)!important;}
#ypApp .ypfr-btn{
  background:var(--yp-surface-soft)!important;border-color:var(--yp-line)!important;
  color:var(--yp-ink)!important;
}
#ypApp .ypfr-btn:hover{border-color:var(--yp-accent)!important;color:var(--yp-accent-dark)!important;}
#ypApp .ypfr-btn.main,#ypApp .ypfr-add button,#ypApp .ypfr-login button{
  background:linear-gradient(135deg,#7778D9,#8C70D4)!important;color:#fff!important;
}
#ypApp .ypfr-btn.ghost{background:transparent!important;color:var(--yp-muted)!important;}
#ypApp .ypfr-btn.ghost:hover{border-color:#E77D77!important;color:#D96E69!important;}
#ypApp .ypfr-ava .on-dot{border-color:var(--yp-surface)!important;}
#ypApp .yp-dm-more{
  background:var(--yp-surface)!important;border-color:var(--yp-line)!important;color:var(--yp-muted)!important;
}
#ypApp .yp-dm-more:hover{border-color:var(--yp-accent)!important;color:var(--yp-accent-dark)!important;}
#ypApp .yp-dmbody .yp-empty:not(#ypEmpty){
  display:flex!important;flex-direction:column;align-items:center;justify-content:center;
  max-width:300px;margin:auto;padding:22px 18px;border:1px dashed var(--yp-line);
  border-radius:20px;background:var(--yp-surface);color:var(--yp-muted)!important;
  box-shadow:0 4px 14px var(--yp-soft-shadow);
}
#ypApp .yp-dmbody .yp-empty:not(#ypEmpty) b{color:var(--yp-ink)!important;}
#ypApp .yp-dmbody .yp-empty:not(#ypEmpty) .yp-egg{font-size:34px;margin:0 0 4px;}
#ypApp .yp-dmbody .yp-empty:not(#ypEmpty) .yp-empty-caption{font-size:12px;color:var(--yp-muted)!important;}
#ypApp button:focus-visible,#ypApp input:focus-visible,#ypApp textarea:focus-visible{
  outline:3px solid color-mix(in srgb,var(--yp-accent) 35%,transparent);outline-offset:2px;
}
@media(max-width:1023px) and (min-width:641px){
  html.theme-pro #ypApp{width:min(410px,calc(100vw - 84px))!important;}
}
@media(max-width:640px){
  #ypApp{
    left:max(6px,var(--ph-left))!important;right:max(6px,var(--ph-right))!important;
    top:auto!important;bottom:calc(var(--ph-safe) + 6px)!important;
    width:auto!important;height:min(82dvh,700px)!important;
    max-height:calc(var(--sdy-mobile-vh,100dvh) - var(--ph-top) - var(--ph-safe) - 12px)!important;
    border-radius:23px!important;
  }
  #ypApp .yp-head{min-height:56px;padding:7px 11px;cursor:default;}
  #ypApp #ypHead button{width:40px!important;height:40px!important;}
  #ypApp .yp-voice{min-height:52px;padding:7px 10px;gap:7px;}
  #ypApp .ypv-join,#ypApp .ypv-mute,#ypApp .ypv-icon,#ypApp .ypv-gear{width:40px;height:40px;}
  #ypApp .yp-bgm{padding:8px 10px;}
  #ypApp .yp-bgm input[type=text]{min-height:40px;font-size:16px!important;}
  #ypApp .yp-body,#ypApp.yp-has-bgm .yp-body{padding:13px 12px 12px!important;}
  #ypApp .yp-stack{max-width:84%;}
  #ypApp .yp-foot{padding:9px 10px max(10px,var(--ph-safe));}
  #ypApp .yp-tools button,#ypApp .yp-send{width:42px;height:42px;}
  #ypApp .yp-input textarea{min-height:42px;font-size:16px!important;}
  #ypApp .yp-emoji{left:8px;right:8px;bottom:62px;grid-template-columns:repeat(6,1fr);}
  #ypApp .yp-emoji button{width:46px;height:46px;}
  #ypApp .yp-settings{left:8px;right:8px;top:62px;width:auto;max-height:62dvh;overflow-y:auto;}
  #ypApp .yp-set-row{min-height:44px;}
}
@media(prefers-reduced-motion:reduce){
  #ypApp *,#ypApp *::before,#ypApp *::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;}
}

/* 홈에 PDF를 놓으면 뜨는 가벼운 드롭 안내 — 포인터는 통과시켜 실제 드롭은 홈이 받는다. */
#homePdfDropOverlay{
  --drop-surface:rgba(255,255,255,.97);
  --drop-ink:#282A39;
  --drop-muted:#80869A;
  --drop-line:#D9D7F3;
  position:fixed;inset:0;z-index:10050;display:grid;place-items:center;
  padding:24px max(20px,env(safe-area-inset-right)) 24px max(20px,env(safe-area-inset-left));
  background:rgba(35,39,57,.18);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,visibility .18s ease;
}
#homePdfDropOverlay.show{opacity:1;visibility:visible;}
#homePdfDropOverlay .home-pdf-drop-card{
  width:min(440px,100%);min-height:230px;padding:28px 26px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;
  border:2px dashed var(--drop-line);border-radius:26px;
  background:var(--drop-surface);color:var(--drop-ink);text-align:center;
  box-shadow:0 22px 70px rgba(35,39,70,.2),inset 0 0 0 6px rgba(119,118,215,.045);
  transform:translateY(6px) scale(.98);transition:transform .2s cubic-bezier(.2,.8,.2,1);
}
#homePdfDropOverlay.show .home-pdf-drop-card{transform:none;}
#homePdfDropOverlay .home-pdf-drop-icon{
  width:62px;height:62px;display:grid;place-items:center;margin-bottom:2px;
  border-radius:20px;background:linear-gradient(145deg,#FFF0EA,#FFE2D8);
  color:#E86868;box-shadow:0 7px 18px rgba(232,104,104,.13);
}
#homePdfDropOverlay .home-pdf-drop-icon i{font-size:31px;}
#homePdfDropOverlay .home-pdf-drop-card b{font-size:19px;font-weight:800;letter-spacing:-.02em;}
#homePdfDropOverlay .home-pdf-drop-card>span:not(.home-pdf-drop-icon){font-size:13px;color:var(--drop-muted);}
#homePdfDropOverlay .home-pdf-drop-card em{
  margin-top:5px;padding:5px 10px;border-radius:999px;
  background:#F1F0FF;color:#6A69C5;font-size:11px;font-style:normal;font-weight:700;
}
html.theme-dark #homePdfDropOverlay:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #homePdfDropOverlay:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:rgba(8,10,16,.46);}
html.theme-dark #homePdfDropOverlay:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #homePdfDropOverlay:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --drop-surface:rgba(39,43,52,.98);--drop-ink:#F2F3F7;--drop-muted:#A7AEBA;--drop-line:#6763A8;
}
html.theme-dark #homePdfDropOverlay .home-pdf-drop-icon:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #homePdfDropOverlay .home-pdf-drop-icon:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#4B393F,#3B364A);color:#FF9B8C;
}
html.theme-dark #homePdfDropOverlay .home-pdf-drop-card em:not(:where(.sdy-editor-light,.sdy-editor-light *)),html.dark #homePdfDropOverlay .home-pdf-drop-card em:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:#38364C;color:#C4C0FF;
}
@media(max-width:640px){
  #homePdfDropOverlay{padding:20px max(18px,env(safe-area-inset-right)) 20px max(18px,env(safe-area-inset-left));}
  #homePdfDropOverlay .home-pdf-drop-card{min-height:210px;padding:24px 18px;border-radius:23px;}
  #homePdfDropOverlay .home-pdf-drop-card b{font-size:17px;}
}
@media(prefers-reduced-motion:reduce){
  #homePdfDropOverlay,#homePdfDropOverlay .home-pdf-drop-card{transition:none!important;}
}

/* 홈 머리줄의 도구는 자리를 그대로 두고, 정렬은 글자 없는 아이콘 컨트롤로. */
html.theme-pro .nf-page-tools .nf-folder-menu{
  border-color:#E7E5EF;background:linear-gradient(145deg,#FFFFFF,#FAF9FD);
  color:#8B7AE8;border-radius:12px;
  box-shadow:0 2px 5px rgba(66,53,114,.055),inset 0 1px 0 rgba(255,255,255,.9);
}
html.theme-pro .nf-page-tools .nf-folder-menu i{font-size:17px;}
html.theme-pro .nf-page-tools .nf-folder-menu:hover{
  background:#F4F1FF;border-color:#DED9F4;color:#6F5CC4;
  box-shadow:0 4px 10px rgba(101,83,168,.10);transform:translateY(-1px);
}
html.theme-pro .nf-page-tools .home-sort-btn{
  --hs-sort-shell:#FFFFFF;
  --hs-sort-tint:#F0EDFF;
  --hs-sort-ink:#6F5CC4;
  --hs-sort-line:#E4DFF7;
  --hs-sort-muted:#9C98AE;
  position:relative;flex:0 0 72px;width:72px;min-width:72px;height:36px;
  display:inline-flex;align-items:center;justify-content:center;gap:0;padding:4px 6px;
  overflow:visible;border:1px solid #E5E2ED;border-radius:13px;
  background:linear-gradient(145deg,#FFFFFF,#FAF9FD);color:var(--hs-sort-ink);
  font-size:0;cursor:pointer;
  box-shadow:0 2px 5px rgba(66,53,114,.055),inset 0 1px 0 rgba(255,255,255,.9);
  transition:transform .16s cubic-bezier(.2,.8,.2,1),border-color .16s ease,background .16s ease,box-shadow .16s ease;
}
html.theme-pro .nf-page-tools .home-sort-btn[data-sort="edited"]{--hs-sort-tint:#F0EDFF;--hs-sort-ink:#6F5CC4;--hs-sort-line:#E4DFF7;}
html.theme-pro .nf-page-tools .home-sort-btn[data-sort="created"]{--hs-sort-tint:#FFF0E8;--hs-sort-ink:#C17B51;--hs-sort-line:#F5E0D3;}
html.theme-pro .nf-page-tools .home-sort-btn[data-sort="name"]{--hs-sort-tint:#EAF7F2;--hs-sort-ink:#438B78;--hs-sort-line:#D6ECE3;}
html.theme-pro .nf-page-tools .home-sort-btn>i:first-child{
  width:26px;height:26px;flex:none;display:inline-flex;align-items:center;justify-content:center;
  border-radius:9px;background:var(--hs-sort-tint);color:var(--hs-sort-ink);
  font-size:16px;line-height:1;transition:background .16s ease,color .16s ease;
}
html.theme-pro .nf-page-tools .home-sort-cycle{
  width:27px;height:26px;flex:none;margin-left:3px;
  display:inline-flex;align-items:center;justify-content:center;
  border-left:1px solid var(--hs-sort-line);border-radius:0 8px 8px 0;
  color:var(--hs-sort-muted);transition:color .16s ease;
}
html.theme-pro .nf-page-tools .home-sort-cycle i{font-size:15px;line-height:1;}
html.theme-pro .nf-page-tools .home-sort-btn:hover{
  border-color:var(--hs-sort-line);background:linear-gradient(145deg,#FFFFFF,var(--hs-sort-tint));
  color:var(--hs-sort-ink);box-shadow:0 5px 12px rgba(72,60,122,.11),inset 0 1px 0 rgba(255,255,255,.9);
  transform:translateY(-1px);
}
html.theme-pro .nf-page-tools .home-sort-btn:hover .home-sort-cycle{color:var(--hs-sort-ink);}
html.theme-pro .nf-page-tools .home-sort-btn:active{transform:scale(.96);}
html.theme-pro .nf-page-tools .home-view-toggle{
  border-color:#E7E5EF;border-radius:13px;
  background:linear-gradient(145deg,#FFFFFF,#FAF9FD);
  box-shadow:0 2px 5px rgba(66,53,114,.055),inset 0 1px 0 rgba(255,255,255,.9);
}
html.theme-pro .nf-page-tools .hvt-btn{border-radius:9px;color:#A19EAD;}
html.theme-pro .nf-page-tools .hvt-btn:hover{background:#F7F5FC;color:#7770A0;}
html.theme-pro .nf-page-tools .hvt-btn.on{
  background:linear-gradient(145deg,#F0EDFF,#F7F4FF);color:#6F5CC4;
  box-shadow:inset 0 0 0 1px rgba(139,122,232,.13),0 1px 3px rgba(82,65,148,.08);
}
html.theme-pro .nf-page-tools .nf-folder-menu:active,
html.theme-pro .nf-page-tools .hvt-btn:active{transform:scale(.95);}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#3A3E49;background:linear-gradient(145deg,#292D35,#252932);
  color:#B8AEF6;box-shadow:0 2px 6px rgba(0,0,0,.18);
}
html.theme-pro.theme-dark .nf-page-tools .nf-folder-menu:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){border-color:#5B5377;background:#302D3C;color:#D2C8FF;}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --hs-sort-shell:#292D35;--hs-sort-tint:#37324A;--hs-sort-ink:#C1B8FF;
  --hs-sort-line:#514A65;--hs-sort-muted:#AAA5B9;
  border-color:#3A3E49;background:linear-gradient(145deg,#2B2F37,#252932);
  color:var(--hs-sort-ink);box-shadow:0 2px 6px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.025);
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn[data-sort="edited"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){--hs-sort-tint:#37324A;--hs-sort-ink:#C1B8FF;--hs-sort-line:#514A65;}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn[data-sort="created"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){--hs-sort-tint:#423332;--hs-sort-ink:#FFC09B;--hs-sort-line:#59423F;}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn[data-sort="name"]:not(:where(.sdy-editor-light,.sdy-editor-light *)){--hs-sort-tint:#2D403C;--hs-sort-ink:#9CD9C3;--hs-sort-line:#3D5B51;}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:var(--hs-sort-line);background:linear-gradient(145deg,#30343D,var(--hs-sort-tint));
  color:var(--hs-sort-ink);box-shadow:0 5px 14px rgba(0,0,0,.25);transform:translateY(-1px);
}
html.theme-pro.theme-dark .nf-page-tools .home-sort-btn:hover .home-sort-cycle:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:var(--hs-sort-ink);}
html.theme-pro.theme-dark .nf-page-tools .home-view-toggle:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  border-color:#3A3E49;background:linear-gradient(145deg,#292D35,#252932);
  box-shadow:0 2px 6px rgba(0,0,0,.18);
}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:not(:where(.sdy-editor-light,.sdy-editor-light *)){color:#A3A7B2;}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){background:#30343D;color:#D4D0E7;}
html.theme-pro.theme-dark .nf-page-tools .hvt-btn.on:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  background:linear-gradient(145deg,#3A354B,#322F40);color:#C1B8FF;
  box-shadow:inset 0 0 0 1px rgba(193,184,255,.13),0 1px 4px rgba(0,0,0,.18);
}
@media(prefers-reduced-motion:reduce){
  html.theme-pro .nf-page-tools .nf-folder-menu,html.theme-pro .nf-page-tools .home-sort-btn,
  html.theme-pro .nf-page-tools .hvt-btn{transition:none!important;}
}

/* ═══════════════════════════════════════════════════════════════════
   26.0 · 홈 다듬기 — 조용한 판 · 하나의 버튼 문법 · 장면 페이드

   · 홈(프로)의 '보이는 것'만 손본다. 미리보기 축소판 기계
     (.note-preview · .note-preview-frame · rescaleOne · pvPaint*)와
     카드 DOM 은 건드리지 않는다 — 배율·중앙 정렬은 그대로다.
   · 버튼은 한 문법만 쓴다: 34px 아이콘 단추 · 10px 라운드 · 투명 바탕 +
     호버 시 옅은 판. 문구 대신 아이콘과 title 로 말한다.
   · 장면(폴더·검색·정렬·보기·홈 복귀)이 바뀔 때만 카드가 살짝 떠오르며
     투명도 0→1 로 나타난다. 같은 장면의 다시 그리기는 조용히 지나간다.
     (표식은 02c-home-stack.js renderGrid 가 장면 키가 달라질 때만 잠깐 붙인다)
   · 다크는 --nf-* 토큰과 생성기(dark-theme.mjs)가 그대로 따라온다.
   ═══════════════════════════════════════════════════════════════════ */

/* ── 26.0-A · 토큰 — 크기·곡률·이징 한 곳 ─────────────────────── */
html.theme-pro{
  --nf-ctl:34px;                 /* 홈의 모든 아이콘 단추 높이 */
  --nf-ctl-r:10px;
  --nf-ctl-ink:#8E93A0;          /* 평소 아이콘 */
  --nf-ctl-ink-on:#1C1C28;       /* 호버·선택 아이콘 */
  --nf-track:#F2F1F6;            /* 세그먼트 트랙 */
  --nf-ease:cubic-bezier(.22,.8,.32,1);
}

/* ── 26.0-B · 머리줄 — 제목은 글자만, 도구는 아이콘만 ─────────── */
/* 아주 넓은 화면에서도 카드가 과하게 커지지 않게 본문 폭에 상한을 둔다
   (머리줄과 격자가 같은 폭을 쓴다). */
html.theme-pro #mainView > main{max-width:1680px;margin-inline:auto;padding-top:26px!important;}
html.theme-pro .nf-page-head{
  align-items:center;gap:12px;min-height:var(--nf-ctl);
  margin:0 0 22px;
}
html.theme-pro .nf-page-title{
  gap:0;font-size:17px;font-weight:650;letter-spacing:-.028em;color:var(--nf-ink);
}
/* 집 아이콘은 왼쪽 목록의 Home 줄과 겹친다 — 글자만 남긴다. */
html.theme-pro .nf-page-title > i{display:none!important;}
html.theme-pro .nf-pinned-lab{margin:0 0 10px;}
html.theme-pro .nf-pinned-title{
  gap:7px;font-size:12.5px;font-weight:600;letter-spacing:-.01em;color:var(--nf-sub);
}
html.theme-pro .nf-pinned-title > i{font-size:12px;color:var(--nf-sub);}

/* 도구 묶음 — Sort · 보기 전환 · 폴더 메뉴가 같은 옷을 입는다. */
html.theme-pro .nf-page-tools{display:flex;align-items:center;gap:6px;}
html.theme-pro .nf-page-tools .nf-folder-menu,
html.theme-pro .nf-page-tools .home-sort-btn{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:var(--nf-ctl);height:var(--nf-ctl);padding:0;
  border:1px solid transparent;border-radius:var(--nf-ctl-r);
  background:transparent;box-shadow:none;
  color:var(--nf-ctl-ink);cursor:pointer;
  transition:background .18s ease,color .18s ease,transform .12s ease;
}
html.theme-pro .nf-page-tools .nf-folder-menu > i,
html.theme-pro .nf-page-tools .home-sort-btn > i:first-child{
  display:inline-flex;align-items:center;justify-content:center;
  width:auto;height:auto;padding:0;border-radius:0;
  background:none;color:inherit;font-size:17px;line-height:1;
}
/* 현재 기준은 아이콘으로만 말한다(양방향 표식은 title 로 대신). */
html.theme-pro .nf-page-tools .home-sort-cycle{display:none!important;}
html.theme-pro .nf-page-tools .nf-folder-menu:hover,
html.theme-pro .nf-page-tools .home-sort-btn:hover{
  background:var(--nf-hover);color:var(--nf-ctl-ink-on);box-shadow:none;
  transform:none;
}
html.theme-pro .nf-page-tools .nf-folder-menu:active,
html.theme-pro .nf-page-tools .home-sort-btn:active{transform:scale(.94);}
html.theme-pro .nf-page-tools .nf-folder-menu:focus-visible,
html.theme-pro .nf-page-tools .home-sort-btn:focus-visible{
  outline:2px solid var(--nf-violet);outline-offset:2px;
}
/* 보기 전환 — 아이폰의 세그먼트처럼 트랙 위 흰 칩 하나. */
html.theme-pro .nf-page-tools .home-view-toggle{
  display:inline-flex;align-items:center;gap:2px;height:var(--nf-ctl);padding:3px;
  border:0;border-radius:12px;background:var(--nf-track);box-shadow:none;
}
html.theme-pro .nf-page-tools .hvt-btn{
  width:28px;height:28px;border-radius:9px;background:transparent;
  color:var(--nf-ctl-ink);
  transition:background .18s ease,color .18s ease,box-shadow .18s ease;
}
html.theme-pro .nf-page-tools .hvt-btn > i{font-size:15px;}
html.theme-pro .nf-page-tools .hvt-btn:hover{background:transparent;color:var(--nf-ctl-ink-on);}
html.theme-pro .nf-page-tools .hvt-btn.on{
  background:var(--nf-card);color:var(--nf-ctl-ink-on);
  box-shadow:0 1px 3px rgba(17,24,39,.12);
}
html.theme-pro .nf-page-tools .hvt-btn:focus-visible{
  outline:2px solid var(--nf-violet);outline-offset:1px;
}

/* ── 26.0-C · 격자 · 카드 — 종이 한 장, 부드러운 모서리 ───────── */
html.theme-pro #noteGrid.nf-grid,
html.theme-pro #nfPinned{gap:18px;}
html.theme-pro #noteGrid.nf-grid > .note-card,
html.theme-pro #nfPinned > .note-card,
html.theme-pro #noteGrid.nf-grid > .folder-card,
html.theme-pro #noteGrid.nf-grid > .add-card{
  /* 전역 '4px 사각' 규칙을 홈 카드에서만 되돌린다. */
  border-radius:18px!important;
  border:1px solid var(--nf-line);
  box-shadow:0 1px 2px rgba(17,24,39,.04),0 16px 34px -28px rgba(17,24,39,.5);
  transition:transform .28s var(--nf-ease),box-shadow .28s var(--nf-ease),border-color .28s var(--nf-ease);
}
html.theme-pro #noteGrid.nf-grid > .note-card:hover,
html.theme-pro #nfPinned > .note-card:hover,
html.theme-pro #noteGrid.nf-grid > .folder-card:hover{
  transform:translateY(-3px);
  border-color:#E3DEF2;
  box-shadow:0 2px 6px rgba(17,24,39,.05),0 26px 48px -32px rgba(17,24,39,.45);
}
html.theme-pro #noteGrid.nf-grid > .note-card:active,
html.theme-pro #nfPinned > .note-card:active{transform:translateY(-1px);}
html.theme-pro #noteGrid.nf-grid > .note-card.selected,
html.theme-pro #nfPinned > .note-card.selected,
html.theme-pro #noteGrid.nf-grid > .note-card.selected:hover,
html.theme-pro #nfPinned > .note-card.selected:hover{
  --nf-sel-ring:#4F6EF7;
  --nf-sel-ring-in:#4F6EF7;
  --nf-sel-halo:rgba(79,110,247,.26);
  border-color:var(--nf-sel-ring)!important;
  box-shadow:0 0 0 3px var(--nf-sel-ring),0 0 0 6px var(--nf-sel-halo),0 16px 34px -28px rgba(17,24,39,.5)!important;
}
html.theme-pro.theme-dark #noteGrid.nf-grid > .note-card.selected:not(:where(.sdy-editor-light,.sdy-editor-light *)),
html.theme-pro.theme-dark #nfPinned > .note-card.selected:not(:where(.sdy-editor-light,.sdy-editor-light *)),
html.theme-pro.theme-dark #noteGrid.nf-grid > .note-card.selected:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)),
html.theme-pro.theme-dark #nfPinned > .note-card.selected:hover:not(:where(.sdy-editor-light,.sdy-editor-light *)){
  --nf-sel-ring:#6380FF;
  --nf-sel-ring-in:#4F6EF7;
  --nf-sel-halo:rgba(99,128,255,.32);
}
html.theme-pro #noteGrid.nf-grid > .note-card.selected::before,
html.theme-pro #nfPinned > .note-card.selected::before{
  content:"";
  position:absolute;
  inset:0;
  border-radius:inherit;
  box-shadow:inset 0 0 0 2px var(--nf-sel-ring-in,var(--nf-sel-ring,#4F6EF7));
  pointer-events:none;
  z-index:6;
}

/* 첫 쪽 위의 두 띠 — 경계 없는 그라데이션 + 아래로 흩어지는 마스크.
   (종이·글자는 .note-preview 가 그대로 그린다. 여기선 판만 다듬는다) */
html.theme-pro .nf-card .nf-card-overlay > .nf-card-top,
html.theme-pro .nf-card .nf-card-overlay > .nf-card-foot{
  padding:14px 16px;
  -webkit-backdrop-filter:blur(6px) saturate(1.02);
  backdrop-filter:blur(6px) saturate(1.02);
}
html.theme-pro .nf-card .nf-card-overlay > .nf-card-top{
  padding-bottom:24px;border-radius:inherit;
  background:linear-gradient(180deg,rgba(255,255,255,.97) 0%,rgba(255,255,255,.88) 55%,rgba(255,255,255,0) 100%);
  -webkit-mask-image:linear-gradient(180deg,#000 0%,#000 58%,transparent 100%);
  mask-image:linear-gradient(180deg,#000 0%,#000 58%,transparent 100%);
}
html.theme-pro .nf-card .nf-card-overlay > .nf-card-foot{
  padding-top:22px;border-radius:inherit;
  background:linear-gradient(0deg,rgba(255,255,255,.97) 0%,rgba(255,255,255,.86) 58%,rgba(255,255,255,0) 100%);
  -webkit-mask-image:linear-gradient(0deg,#000 0%,#000 58%,transparent 100%);
  mask-image:linear-gradient(0deg,#000 0%,#000 58%,transparent 100%);
}
html.theme-pro .nf-card .nf-card-top{gap:8px;}
html.theme-pro .nf-card .ncn-title{
  font-size:13.5px;font-weight:600;letter-spacing:-.014em;color:#1F2030;
}
html.theme-pro .nf-card .ncm-date{font-size:11px;letter-spacing:-.005em;color:#A6A7B4;}
html.theme-pro .nf-card .nf-tag{
  font-size:10.5px;font-weight:600;letter-spacing:-.005em;
  padding:3px 8px;border-radius:99px;
}
html.theme-pro .nf-card .note-menu-btn{
  margin-left:2px;padding:1px;border-radius:6px;font-size:16px;color:#BDBEC8;
}
html.theme-pro .nf-card .nf-pin,
html.theme-pro .nf-card .nf-lock{font-size:12px;color:#C2C3CC;}

/* 폴더 카드 — 노트 카드와 같은 곡률·여백 */
html.theme-pro #noteGrid.nf-grid > .folder-card{padding:16px 18px 15px;}
html.theme-pro #noteGrid.nf-grid > .folder-card .folder-thumb{height:48px;}
html.theme-pro #noteGrid.nf-grid > .folder-card .note-card-name{font-size:13.5px;}

/* 빈 화면 — 설명 대신 한 줄. */
html.theme-pro .nf-empty{
  min-height:200px;gap:10px;color:var(--nf-sub);
  font-size:13px;line-height:1.55;
}
html.theme-pro .nf-empty i{font-size:26px;opacity:.35;margin:0;}
html.theme-pro .nf-empty strong{font-size:14px;font-weight:600;color:var(--nf-ink2);}
html.theme-pro .nf-empty > span{display:none;}

/* ── 26.0-D · 검색 결과 띠 · 정렬 팝오버 ──────────────────────── */
html.theme-pro .pro-results{
  display:flex;align-items:center;gap:10px;
  margin:0 0 16px;padding:0 2px;
  color:var(--nf-sub);font-size:12.5px;letter-spacing:-.01em;
}
html.theme-pro .pro-results .pro-results-x{
  width:24px;height:24px;border:0;border-radius:7px;background:transparent;
  color:var(--nf-ctl-ink);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  transition:background .16s ease,color .16s ease;
}
html.theme-pro .pro-results .pro-results-x:hover{background:var(--nf-hover);color:var(--nf-ink);}
html.theme-pro .home-sort-pop{border-radius:13px;padding:5px;}
html.theme-pro .home-sort-pop .hsort-item{min-height:36px;border-radius:8px;font-size:12.5px;}

/* ── 26.0-E · 사이드바 · 상단줄 · 오른쪽 칸 — 같은 손맛 ─────── */
html.theme-pro .pro-brand{margin-bottom:26px;}
html.theme-pro .nf-folders{margin-top:14px;}
html.theme-pro .nf-folders .pro-fold-item,
html.theme-pro .nf-row{
  min-height:36px;border-radius:var(--nf-ctl-r);
  transition:background .16s ease,color .16s ease;
}
html.theme-pro .nf-new{box-shadow:0 6px 16px -8px rgba(139,122,232,.5);}
html.theme-pro .nf-new:hover{box-shadow:0 10px 22px -10px rgba(139,122,232,.55);}
html.theme-pro .nf-server-track{height:6px;}

/* 상단줄 — 알림·프로필·메뉴가 같은 34px 아이콘 단추 */
html.theme-pro .nf-topbar{padding:0 20px 0 24px;}
/* 프로필(아바타)은 보라 원 그대로 — 도구 단추 문법에서 뺀다. */
html.theme-pro .nf-topbar .nf-btn-slot:not(.nf-avatar-slot) .tool-btn,
html.theme-pro .nf-topbar .nf-menu-btn{
  width:var(--nf-ctl)!important;height:var(--nf-ctl)!important;
  border:0!important;border-radius:var(--nf-ctl-r)!important;
  background:transparent!important;color:var(--nf-ctl-ink)!important;
  transition:background .18s ease,color .18s ease!important;
}
html.theme-pro .nf-topbar .nf-btn-slot:not(.nf-avatar-slot) .tool-btn:hover,
html.theme-pro .nf-topbar .nf-menu-btn:hover{
  background:var(--nf-hover)!important;color:var(--nf-ctl-ink-on)!important;
}
html.theme-pro .nf-clock{font-size:12.5px;color:var(--nf-sub);}
html.theme-pro .nf-search-slot #searchInput{height:38px!important;font-size:12.5px;}

/* 오른쪽 칸 손잡이 — 글자 대신 화살표 하나. */
html.theme-pro .nf-rail-tab > span{display:none;}
html.theme-pro .nf-rail-tab{padding:12px 7px;border-radius:11px 0 0 11px;}
html.theme-pro .nf-rail-tab > i{font-size:17px;}

/* 위젯 — 머리글 리듬과 아이콘 단추를 홈과 같게 */
html.theme-pro .nf-widget{padding:16px 16px 14px;border-radius:16px;}
html.theme-pro .nf-widget-head{margin-bottom:10px;}
html.theme-pro .nf-widget-head b{font-size:12.5px;font-weight:650;color:var(--nf-ink2);letter-spacing:-.01em;}
html.theme-pro .nf-widget-more,
html.theme-pro .nf-flash-sub button{
  width:26px;height:26px;border-radius:8px;color:#B4B6C0;
  transition:background .16s ease,color .16s ease;
}
html.theme-pro .nf-widget-more:hover,
html.theme-pro .nf-flash-sub button:hover{background:var(--nf-hover);color:var(--nf-violet-ink);}
html.theme-pro .nf-now-btn{transition:background .16s ease,color .16s ease;}
html.theme-pro .nf-now-btn:hover{background:var(--nf-hover);}
html.theme-pro .nf-now-art{border-radius:12px;}

/* ── 26.0-F · 장면 페이드 ─────────────────────────────────────── */
/* 장면이 바뀐 순간에만 클래스가 붙는다 — 같은 장면의 재그리기는 애니메이션 없음 */
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *,
html.theme-pro #nfPinned[data-nf-scene="in"] > *{
  animation:nfSceneIn .36s var(--nf-ease) both;
}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(2),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(2){animation-delay:.028s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(3),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(3){animation-delay:.056s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(4),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(4){animation-delay:.084s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(5),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(5){animation-delay:.112s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(6),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(6){animation-delay:.14s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(7),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(7){animation-delay:.168s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(8),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(8){animation-delay:.196s;}
html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *:nth-child(n+9),
html.theme-pro #nfPinned[data-nf-scene="in"] > *:nth-child(n+9){animation-delay:.224s;}
html.theme-pro #nfPageHead[data-nf-scene="in"] .nf-page-title{
  animation:nfHeadIn .32s var(--nf-ease) both;
}
html.theme-pro .pro-results:not([hidden]){animation:nfHeadIn .3s var(--nf-ease) both;}

/* 홈 ⇄ 편집기 — 미끄러짐 대신 투명도로 조용히 오간다.
   (닫을 때 종이는 400ms 뒤에 내려가므로 그동안 사라지는 페이드가 보인다) */
html.theme-pro .editor{
  opacity:0!important;visibility:hidden!important;
  transition:opacity .24s var(--nf-ease),visibility 0s linear .24s!important;
}
html.theme-pro .editor.open{
  opacity:1!important;visibility:visible!important;
  transition:opacity .24s var(--nf-ease),visibility 0s!important;
}
/* 오른쪽 칸도 밀려 나오며 함께 옅어진다 */
html.theme-pro .nf-rail{
  opacity:0;
  transition:transform .26s cubic-bezier(.4,.1,.2,1),opacity .2s ease,visibility 0s linear .26s;
}
html.theme-pro body.nf-rail-open .nf-rail{
  opacity:1;
  transition:transform .26s cubic-bezier(.4,.1,.2,1),opacity .22s ease,visibility 0s;
}
/* 모바일 서랍 사이드바 */
@media (max-width:1023px){
  html.theme-pro #proSide{
    opacity:0;
    transition:transform .22s cubic-bezier(.4,.1,.2,1),opacity .18s ease;
  }
  html.theme-pro body.nf-side-open #proSide{opacity:1;}
}

/* 창이 떠오를 때 바탕도 함께 옅게 깔린다 — 홈에서 뜨는 창만.
   (편집기 안의 창은 편집기 화면 그대로 둔다) */
html.theme-pro body:not(.in-editor) .modal-bg{animation:nfScrimIn .2s ease both;}
html.theme-pro body:not(.in-editor) .modal-bg .modal-box{animation:fadeInUp .24s var(--nf-ease) both;}
@media (prefers-reduced-motion:reduce){
  html.theme-pro body:not(.in-editor) .modal-bg,
  html.theme-pro body:not(.in-editor) .modal-bg .modal-box{animation:none!important;}
}

/* ── 26.0-G · 좁은 화면 보정 ──────────────────────────────────── */
@media (max-width:1023px){
  html.theme-pro #mainView > main{padding:20px 20px 48px!important;}
  html.theme-pro .nf-topbar{padding:0 14px;}
  html.theme-pro .nf-page-head{margin-bottom:18px;}
}
@media (max-width:560px){
  html.theme-pro #mainView > main{padding:16px 14px 36px!important;}
  html.theme-pro .nf-topbar{padding:0 12px;}
  html.theme-pro #noteGrid.nf-grid,
  html.theme-pro #nfPinned{gap:14px;}
  html.theme-pro #noteGrid.nf-grid > .note-card,
  html.theme-pro #nfPinned > .note-card,
  html.theme-pro #noteGrid.nf-grid > .folder-card{border-radius:16px!important;}
  html.theme-pro .nf-page-head{margin-bottom:16px;gap:8px;}
  html.theme-pro .nf-page-title{font-size:16px;}
  html.theme-pro .nf-page-tools{gap:4px;}
}
@media (prefers-reduced-motion:reduce){
  html.theme-pro #noteGrid.nf-grid[data-nf-scene="in"] > *,
  html.theme-pro #nfPinned[data-nf-scene="in"] > *,
  html.theme-pro #nfPageHead[data-nf-scene="in"] .nf-page-title,
  html.theme-pro .pro-results:not([hidden]){animation:none!important;}
  html.theme-pro .editor,
  html.theme-pro .nf-rail,
  html.theme-pro .nf-page-tools .hvt-btn{transition:none!important;}
}

/* ═══════════════════════════════════════════════════════════════════════════
   27.0 · 미니멀 홈 리뉴얼 — "기능은 많되, 기능이 없어 보이는 집"
   ───────────────────────────────────────────────────────────────────────────
   · 항상 맨 뒤에 둔다. 22.0 NoteFlow 스킨을 지우지 않고 덮어쓴다(계약·클래식 유지).
   · body.sdy-min 은 HTML 에서 첫 페인트부터 켜고, 02j-home-minimal.js 가 저장된 테마에 맞게 정규화한다.
     왼쪽 바 · 오른쪽 위젯 칸 · 머리줄(Sort/보기 전환)은 감추고, 그 기능은 #sdyHub 서랍으로 옮긴다.
   · 색은 전부 var(--mn-*) 토큰이다 → scripts/dark-theme.mjs 가 건드리지 않는다.
     다크는 --nf-* 토큰을 그대로 물려받아 자동으로 따라간다.
   ═══════════════════════════════════════════════════════════════════════════ */
/* 도구 서랍은 기본 미니멀 셸 전용 — 비프로/초기화 순간에 원시 메뉴로 노출되지 않게 한다. */
.sdy-hub{display:none;}
html.theme-pro body.sdy-min{
  --mn-page:var(--nf-page);
  --mn-card:var(--nf-card);
  --mn-field:var(--nf-field);
  --mn-ink:var(--nf-ink);
  --mn-ink2:var(--nf-ink2);
  --mn-sub:var(--nf-sub);
  --mn-line:var(--nf-line);
  --mn-hair:var(--nf-hair);
  --mn-hover:var(--nf-hover);
  --mn-accent:var(--nf-violet);
  --mn-accent-soft:var(--nf-violet-soft);
  --mn-scrim:rgba(14,17,26,.30);
  --mn-shadow:0 20px 60px -26px rgba(12,16,28,.45);
  --mn-bar-w:900px;
  background:var(--mn-page);
}

/* ── 27.0-A · 왼쪽 바를 없앤다 ─────────────────────────────────────────
   #proSide 자체는 display:flex 로 남긴다(프로 셸 계약 유지). 크기 0 · 투명 ·
   포인터 차단으로 '바 자체'가 사라진다. 내용은 서랍으로 옮겨졌거나 잠든다. */
html.theme-pro body.sdy-min #proSide{
  width:0!important;min-width:0!important;height:0!important;min-height:0!important;
  padding:0!important;margin:0!important;border:0!important;
  background:transparent!important;overflow:hidden!important;
  opacity:0!important;pointer-events:none!important;z-index:-1!important;
  transform:none!important;
}
html.theme-pro body.sdy-min #proSide > *{display:none!important;}
html.theme-pro body.sdy-min #mainView{
  margin-left:0!important;margin-right:0!important;
  left:auto!important;right:auto!important;
  width:100%!important;max-width:none!important;
}
/* 배경 파동 · 떠 있는 음악 바 · 선택 바 · 엽스코드 창도 왼쪽 바 폭을 잊는다 */
html.theme-pro body.sdy-min #proHomeEq{left:0!important;width:100%!important;}
html.theme-pro body.sdy-min .mp.mp-bar,
html.theme-pro body.sdy-min .mp.mp-list,
html.theme-pro body.sdy-min .select-bar{left:50%!important;}
html.theme-pro body.sdy-min #ypApp{left:12px!important;right:auto!important;}

/* ── 27.0-B · 상단줄 = 작은 로고 + 검색 + 새 노트 + 설정 ──────────────── */
html.theme-pro body.sdy-min .nf-topbar{
  position:sticky;top:0;z-index:80;
  height:auto;min-height:66px;
  padding:12px max(18px,calc((100% - var(--mn-bar-w))/2));
  gap:10px;align-items:center;
  background:var(--mn-page);
  border-bottom:1px solid var(--mn-hair);
  -webkit-backdrop-filter:none;backdrop-filter:none;
}
html.theme-pro body.sdy-min .nf-topbar > .nf-topright{display:none!important;}
html.theme-pro body.sdy-min .nf-menu-btn{display:none!important;}
html.theme-pro body.sdy-min .sdy-min-logo{
  flex:0 0 auto;width:32px;height:32px;padding:0;
  border:0;border-radius:10px;background:transparent;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-min-logo .brand-mark{
  width:25px;height:25px;border-radius:8px;display:block;object-fit:contain;
}
html.theme-pro body.sdy-min .sdy-min-logo:hover{background:var(--mn-hover);}
html.theme-pro body.sdy-min .nf-search-slot{
  flex:1 1 auto;min-width:0;justify-content:flex-start;max-width:none;
}
html.theme-pro body.sdy-min .nf-search-slot .search-wrap{flex:1;max-width:none;min-width:0;}
html.theme-pro body.sdy-min .nf-search-slot .search-wrap > i{left:15px;color:var(--mn-sub);}
html.theme-pro body.sdy-min .nf-search-slot #searchInput{
  height:44px!important;
  padding:0 14px 0 42px!important;
  border:1px solid var(--mn-line)!important;border-radius:14px!important;
  background:var(--mn-field)!important;color:var(--mn-ink);
  font-size:14px;box-shadow:none!important;
}
html.theme-pro body.sdy-min .nf-search-slot #searchInput::placeholder{color:var(--mn-sub);}
html.theme-pro body.sdy-min .nf-search-slot #searchInput:focus{
  border-color:var(--mn-accent)!important;
}
html.theme-pro body.sdy-min .sdy-min-new,
html.theme-pro body.sdy-min .sdy-min-gear{
  flex:0 0 auto;width:40px;height:40px;padding:0;
  border:1px solid var(--mn-line);border-radius:13px;
  background:var(--mn-card);color:var(--mn-ink2);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-min-new > i,
html.theme-pro body.sdy-min .sdy-min-gear > i{font-size:21px;line-height:1;}
html.theme-pro body.sdy-min .sdy-min-gear{color:var(--mn-ink);}
html.theme-pro body.sdy-min .sdy-min-new:hover,
html.theme-pro body.sdy-min .sdy-min-gear:hover{background:var(--mn-hover);color:var(--mn-ink);}
html.theme-pro body.sdy-min.sdy-hub-open .sdy-min-gear{
  background:var(--mn-accent-soft);color:var(--mn-accent);
  border-color:var(--mn-accent-soft);
}

/* ── 27.0-C · 본문 — 노트 미리보기만 ───────────────────────────────── */
html.theme-pro body.sdy-min #mainView > main{
  max-width:calc(var(--mn-bar-w) + 40px);margin-inline:auto;
  padding:30px 20px 96px!important;overflow:visible;
}
html.theme-pro body.sdy-min .nf-page-head,
html.theme-pro body.sdy-min .breadcrumb,
html.theme-pro body.sdy-min .paper-ticker,
html.theme-pro body.sdy-min .nf-rail,
html.theme-pro body.sdy-min .nf-rail-tab,
html.theme-pro body.sdy-min #homeFab,
html.theme-pro body.sdy-min .home-tools,
html.theme-pro body.sdy-min .home-tabs{display:none!important;}
html.theme-pro body.sdy-min.nf-rail-open #mainView{margin-right:0!important;}
html.theme-pro body.sdy-min .sdy-min-crumb{
  display:flex;align-items:center;gap:6px;margin:0 0 20px;min-height:34px;
}
html.theme-pro body.sdy-min .sdy-min-crumb[hidden]{display:none!important;}
html.theme-pro body.sdy-min .sdy-min-crumb-back,
html.theme-pro body.sdy-min .sdy-min-crumb-more{
  width:30px;height:30px;flex:0 0 auto;padding:0;
  border:0;border-radius:9px;background:transparent;color:var(--mn-ink2);
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  font-size:18px;
}
html.theme-pro body.sdy-min .sdy-min-crumb-back:hover,
html.theme-pro body.sdy-min .sdy-min-crumb-more:hover{background:var(--mn-hover);}
html.theme-pro body.sdy-min .sdy-min-crumb-name{
  font-size:16px;font-weight:700;letter-spacing:-.025em;color:var(--mn-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}

/* ── 27.0-D · 숨은 도구 서랍 ────────────────────────────────────────── */
html.theme-pro body.sdy-min .sdy-hub-scrim{
  position:fixed;inset:0;z-index:890;background:var(--mn-scrim);
}
html.theme-pro body.sdy-min .sdy-hub-scrim[hidden]{display:none!important;}
html.theme-pro body.sdy-min .sdy-hub{
  position:fixed;top:0;right:0;bottom:0;z-index:900;
  width:min(368px,92vw);
  display:flex;flex-direction:column;min-height:0;
  background:var(--mn-card);
  border-left:1px solid var(--mn-line);
  box-shadow:var(--mn-shadow);
  visibility:hidden;transform:translateX(102%);
  transition:transform .24s cubic-bezier(.22,.8,.32,1),visibility 0s linear .24s;
}
html.theme-pro body.sdy-min.sdy-hub-open .sdy-hub{
  visibility:visible;transform:none;
  transition:transform .24s cubic-bezier(.22,.8,.32,1),visibility 0s;
}
html.theme-pro body.sdy-min .sdy-hub-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:18px 20px 12px;flex:0 0 auto;
}
html.theme-pro body.sdy-min .sdy-hub-title{
  font-size:15px;font-weight:700;letter-spacing:-.025em;color:var(--mn-ink);
}
html.theme-pro body.sdy-min .sdy-hub-x{
  width:32px;height:32px;padding:0;border:0;border-radius:10px;
  background:var(--mn-field);color:var(--mn-ink2);
  display:inline-flex;align-items:center;justify-content:center;
  font-size:19px;cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-hub-x:hover{background:var(--mn-hover);color:var(--mn-ink);}
html.theme-pro body.sdy-min .sdy-hub-body{
  flex:1 1 auto;min-height:0;overflow-y:auto;padding:4px 18px 30px;
}
html.theme-pro body.sdy-min .sdy-hub-sec-h{
  font-size:11px;font-weight:700;letter-spacing:.055em;color:var(--mn-sub);
  margin:20px 2px 9px;
}

/* 27.2 · 서랍 맨 위 — 아이콘만 남긴 Archive · Admin Mode · Server,
   그리고 상단줄에서 옮겨 온 알림 · 계정 · 오프라인 배지.
   시계는 '집중 시계' 칩과, 설정 톱니바퀴는 상단바 ⚙ 과 겹쳐서 감춘다. */
html.theme-pro body.sdy-min .sdy-hub-quick{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  padding-bottom:4px;border-bottom:1px solid var(--mn-hair);
}
html.theme-pro body.sdy-min .sdy-hub-quick #nfClockBtn,
html.theme-pro body.sdy-min .sdy-hub-quick #nfSetRow{display:none!important;}
/* 설정 창 입구 — 톱니바퀴 대신 글자가 붙은 한 줄 (중복 아님) */
html.theme-pro body.sdy-min .sdy-hub-settings{
  display:flex;align-items:center;gap:11px;width:100%;
  margin-top:12px;padding:11px 12px;border:1px solid var(--mn-line);border-radius:13px;
  background:var(--mn-field);color:var(--mn-ink);text-align:left;cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-hub-settings > i:first-child{
  flex:0 0 auto;font-size:19px;line-height:1;color:var(--mn-accent);
}
html.theme-pro body.sdy-min .sdy-hub-settings-copy{
  display:flex;flex:1 1 auto;flex-direction:column;gap:2px;min-width:0;
}
html.theme-pro body.sdy-min .sdy-hub-settings-copy b{font-size:13px;font-weight:700;}
html.theme-pro body.sdy-min .sdy-hub-settings-copy small{font-size:11px;color:var(--mn-sub);}
html.theme-pro body.sdy-min .sdy-hub-settings-go{
  flex:0 0 auto;font-size:18px;line-height:1;color:var(--mn-sub);
}
html.theme-pro body.sdy-min .sdy-hub-settings:hover{background:var(--mn-hover);}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-topright{
  display:flex!important;flex-wrap:wrap;align-items:center;gap:8px;
  margin:0!important;width:auto;flex:0 0 auto;
}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-offline-slot{
  display:inline-flex;margin:0!important;
}
html.theme-pro body.sdy-min .sdy-hub-quick .offline-badge{
  display:inline-flex;align-items:center;height:38px;
  padding:0 11px!important;margin:0!important;border-radius:12px;
  background:var(--mn-field);color:var(--mn-ink2);font-size:11.5px;
}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-clock{
  display:inline-flex;align-items:center;justify-content:center;
  height:38px;min-width:56px;padding:0 10px;
  border:1px solid var(--mn-line);border-radius:12px;
  background:var(--mn-field);color:var(--mn-ink2);
  font-size:12px;font-weight:600;
}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-clock:hover{background:var(--mn-hover);}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-btn-slot{display:inline-flex;position:relative;}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-btn-slot .tool-btn{
  width:38px;height:38px;padding:0;border:1px solid var(--mn-line);border-radius:12px;
  background:var(--mn-field);color:var(--mn-ink2);
  display:inline-flex;align-items:center;justify-content:center;
}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-btn-slot .tool-btn:hover{background:var(--mn-hover);}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-avatar-slot .acc-btn{
  width:38px;height:38px;margin:0;padding:0;border:1px solid var(--mn-line);border-radius:50%;
  background:var(--mn-field);color:var(--mn-ink2);box-shadow:none;
}
html.theme-pro body.sdy-min .sdy-hub-quick .nf-avatar-slot .acc-btn:hover{
  background:var(--mn-hover);color:var(--mn-ink);
}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-row{
  display:inline-flex!important;align-items:center;justify-content:center;
  width:38px;height:38px;padding:0!important;margin:0!important;
  border:1px solid var(--mn-line)!important;border-radius:12px;
  background:var(--mn-field);color:var(--mn-ink2);cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-row > span{display:none!important;}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-row > i{font-size:18px;line-height:1;}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-row:hover{background:var(--mn-hover);color:var(--mn-ink);}
/* 숫자가 0→100%로 바뀌어도 도구 줄에서 서버 단추가 밀리지 않게
   단추와 퍼센트 칸의 폭을 미리 확보한다. */
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-server{
  display:inline-flex;align-items:center;gap:8px;flex:0 0 138px;
  width:138px;height:38px;padding:0 11px!important;margin:0!important;
  border:1px solid var(--mn-line)!important;border-radius:12px;
  background:var(--mn-field);color:var(--mn-ink2);cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-server .nf-server-top{
  gap:6px;font-size:11px;white-space:nowrap;
}
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-server #nfSrvPct{
  flex:0 0 30px;width:30px;text-align:right;font-variant-numeric:tabular-nums;
}
/* 가로형 미리보기에서는 사이드바 세로 배치의 위 여백(8px)을 상속하지 않는다. */
html.theme-pro body.sdy-min .sdy-hub-quick > .nf-server .nf-server-track{
  flex:0 0 32px;width:32px;margin-top:0;
}

/* 위젯 세 개를 비롯한 나머지 기능 = 이름 붙은 작은 칩 */
html.theme-pro body.sdy-min .sdy-hub-launch{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;
}
html.theme-pro body.sdy-min .sdy-hub-chip{
  display:flex;align-items:center;gap:9px;min-width:0;
  padding:11px 12px;border:1px solid var(--mn-line);border-radius:13px;
  background:var(--mn-field);color:var(--mn-ink2);
  font-family:inherit;font-size:12.5px;font-weight:600;text-align:left;cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-hub-chip > i{
  flex:0 0 auto;font-size:17px;line-height:1;color:var(--mn-accent);
}
html.theme-pro body.sdy-min .sdy-hub-chip > span{
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro body.sdy-min .sdy-hub-chip:hover{
  background:var(--mn-hover);color:var(--mn-ink);border-color:var(--mn-accent-soft);
}
/* 27.1 · 파일 보관함은 관리자 로그인(body.admin-on) 때만 앱에 나타난다.
   applyAdminMode() 가 이 클래스를 켜고 끄므로 칩은 저절로 따라간다. */
html.theme-pro body.sdy-min:not(.admin-on) .sdy-hub-chip[data-act="vault"]{display:none!important;}

/* 디렉토리 · 북마크 — 왼쪽 바의 실제 목록을 그대로 담는다 */
html.theme-pro body.sdy-min .sdy-hub-slot{
  border:1px solid var(--mn-line);border-radius:14px;
  background:var(--mn-field);padding:8px;
  max-height:260px;overflow-y:auto;
}
html.theme-pro body.sdy-min .sdy-hub-slot > .nf-folders{
  display:block;flex:none;min-height:0;max-height:none;overflow:visible;
}
html.theme-pro body.sdy-min .sdy-hub-slot .pro-fold-item{
  width:100%;border-radius:9px;
}
html.theme-pro body.sdy-min .sdy-hub-slot > .pro-bookmarks{
  display:block;width:100%;margin:0;border:0;background:transparent;
}
/* 27.1 · 북마크는 '눌러서 확장'이 아니다 — summary 를 없애고 항상 펴 둔다.
   섹션 제목은 위쪽 .sdy-hub-sec-h 가 맡고, 목록은 이 칸에서 아래로 스크롤한다. */
html.theme-pro body.sdy-min .sdy-hub-slot > .pro-bookmarks > summary{display:none!important;}
html.theme-pro body.sdy-min .sdy-hub-slot > .pro-bookmarks > summary::-webkit-details-marker{display:none;}
html.theme-pro body.sdy-min #sdyHubBookmarks{max-height:none;overflow:visible;}
/* #proBookmarkSlot 의 기존 ID 규칙(260px)보다 높은 특이도로 스크롤 높이를 정한다 */
html.theme-pro body.sdy-min #sdyHubBookmarks .nf-bm-panel{
  display:block;width:100%;
  max-height:min(280px,38dvh);overflow-y:auto;overflow-x:hidden;
  overscroll-behavior:contain;scrollbar-width:thin;
  background:transparent;border:0;box-shadow:none;padding:2px 4px 8px;
}
html.theme-pro body.sdy-min .sdy-hub-slot .link-bar{
  display:flex;flex-wrap:wrap;gap:6px;width:100%;margin:0;
}
html.theme-pro body.sdy-min .sdy-hub-slot .link-chip{
  max-width:100%;border-radius:8px;background:var(--mn-card);
  border:1px solid var(--mn-line);color:var(--mn-ink2);
}

/* ── 27.3-A · 폴더 안의 하위 폴더 줄 ────────────────────────────────
   프로 폴더 화면은 #noteGrid 에 노트만 둔다. 대신 경로 줄 아래 한 줄에
   하위 폴더 칩을 그려 '폴더 만들기' 결과가 그 자리에서 보이게 한다. */
html.theme-pro body.sdy-min .sdy-min-subs{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 18px;
}
html.theme-pro body.sdy-min .sdy-min-subs[hidden]{display:none!important;}
html.theme-pro body.sdy-min .sdy-min-subs-lab{
  font-size:11px;font-weight:700;color:var(--mn-sub);margin-right:2px;
}
html.theme-pro body.sdy-min .sdy-min-sub{
  display:inline-flex;align-items:center;gap:7px;max-width:220px;
  padding:8px 12px;border:1px solid var(--mn-line);border-radius:11px;
  background:var(--mn-card);color:var(--mn-ink2);
  font-family:inherit;font-size:12.5px;font-weight:600;cursor:pointer;
}
html.theme-pro body.sdy-min .sdy-min-sub > i{font-size:15px;line-height:1;}
html.theme-pro body.sdy-min .sdy-min-sub > span{
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
html.theme-pro body.sdy-min .sdy-min-sub:hover{background:var(--mn-hover);color:var(--mn-ink);}

/* ── 27.3-B · 북마크 항목 = 이름 + 주소 두 줄 ───────────────────────
   헤더의 가로 링크 바(.link-bar)는 예전 한 줄 그대로 — lc-url 은 감춘다. */
.lc-url{display:none;}
html.theme-pro body.sdy-min #sdyHubBookmarks .link-chip{
  flex-wrap:wrap;align-content:center;min-height:56px;row-gap:2px;
}
html.theme-pro body.sdy-min #sdyHubBookmarks .link-chip > span{
  flex:0 1 auto;min-width:0;
}
html.theme-pro body.sdy-min #sdyHubBookmarks .lc-url{
  display:block;flex:0 0 100%;min-width:0;
  font-size:10.5px;line-height:1.35;font-weight:400;color:var(--mn-sub);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
/* 북마크 추가 버튼 — 목록 맨 아래가 아니라 북마크 안쪽 첫 줄로 옮긴다.
   스크롤해도 항상 보이게 sticky 로 붙인다(중복 버튼 없음). */
html.theme-pro body.sdy-min #sdyHubBookmarks .link-add{
  order:-1;position:sticky;top:-2px;z-index:2;
  height:38px;min-height:38px;
  background:var(--mn-card);
}

/* ── 27.0-E · 좁은 화면 ────────────────────────────────────────────── */
@media (max-width:1023px){
  html.theme-pro body.sdy-min #mainView{margin-left:0!important;left:auto!important;width:100%!important;}
  html.theme-pro body.sdy-min .nf-topbar{padding:10px 14px;gap:8px;}
  html.theme-pro body.sdy-min #mainView > main{padding:24px 16px 84px!important;}
}
@media (max-width:560px){
  html.theme-pro body.sdy-min .nf-topbar{min-height:60px;padding:9px 10px;gap:6px;}
  html.theme-pro body.sdy-min .sdy-min-logo{width:28px;height:28px;}
  html.theme-pro body.sdy-min .sdy-min-logo .brand-mark{width:22px;height:22px;}
  html.theme-pro body.sdy-min .nf-search-slot #searchInput{height:40px!important;font-size:13px;}
  html.theme-pro body.sdy-min .sdy-min-new,
  html.theme-pro body.sdy-min .sdy-min-gear{width:36px;height:36px;border-radius:11px;}
  html.theme-pro body.sdy-min #mainView > main{padding:20px 12px 76px!important;}
  html.theme-pro body.sdy-min .sdy-hub{width:100%;border-left:0;}
  html.theme-pro body.sdy-min .sdy-hub-launch{grid-template-columns:repeat(2,minmax(0,1fr));}
}
/* 320px 화면에서도 오프라인 배지가 없으면 바로 가기 네 개를 한 줄에 둔다. */
@media (max-width:360px){
  html.theme-pro body.sdy-min .sdy-hub-body{padding-inline:12px;}
  html.theme-pro body.sdy-min .sdy-hub-quick,
  html.theme-pro body.sdy-min .sdy-hub-quick > .nf-topright{gap:4px;}
  html.theme-pro body.sdy-min .sdy-hub-quick .nf-btn-slot .tool-btn,
  html.theme-pro body.sdy-min .sdy-hub-quick .nf-avatar-slot .acc-btn,
  html.theme-pro body.sdy-min .sdy-hub-quick > .nf-row{width:36px;}
}
@media (prefers-reduced-motion:reduce){
  html.theme-pro body.sdy-min .sdy-hub{transition:none;}
}

/* ── 편집 툴바 · 같은 유형 도구는 하나의 긴 조약돌(pebble) 캡슐로 묶는다 ─────────
   - 도구 하나하나에 테두리·그림자를 주던 방식을 버리고, 그룹(서식/넣기/그리기/찾기/기록)마다
     캡슐 하나만 떠 있게 한다. 버튼은 캡슐 안에서 배경 없이 hover 색만 바뀐다.
   - 편집기는 항상 sdy-editor-light(라이트 토큰) 범위라 다크 테마에서도 툴바가 밝게 남던 문제를
     툴바 자체에 다크 토큰을 다시 얹어 해결한다. */
html.theme-pro.theme-dark #editorView .editor-toolbar,
html.theme-pro.theme-dark .editor-toolbar{
  --ed-pebble-bg:linear-gradient(180deg,rgba(54,58,68,.97) 0%,rgba(36,39,47,.97) 100%);
  --ed-pebble-bg-hover:linear-gradient(180deg,rgba(66,71,83,.98) 0%,rgba(46,50,60,.98) 100%);
  --ed-pebble-bg-focus:linear-gradient(180deg,rgba(74,79,92,.98) 0%,rgba(54,58,68,.98) 100%);
  --ed-pebble-border:rgba(255,255,255,.12);
  --ed-pebble-border-hover:rgba(255,255,255,.22);
  --ed-pebble-ink:#E6E8EE;
  --ed-pebble-ink-strong:#FFFFFF;
  --ed-pebble-ink3:#9AA3B2;
  --ed-pebble-subtle:rgba(255,255,255,.08);
  --ed-pebble-sep:rgba(255,255,255,.14);
  --ed-pebble-shadow:0 6px 16px -4px rgba(0,0,0,.55),0 2px 4px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.07);
  --ed-pebble-shadow-hover:0 9px 20px -4px rgba(0,0,0,.6),0 3px 6px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.10);
  --ed-pebble-fmt-hover:linear-gradient(180deg,rgba(79,110,247,.32) 0%,rgba(79,110,247,.20) 100%);
  --ed-pebble-fmt-ink:#B4C4FF;
  --ed-pebble-insert-ink:#FFB49A;
  --ed-pebble-insert-hover:linear-gradient(180deg,rgba(234,120,80,.30) 0%,rgba(234,120,80,.18) 100%);
  --ed-pebble-insert-hover-ink:#FFC4AE;
  --ed-pebble-draw-ink:#7EE7D9;
  --ed-pebble-draw-hover:linear-gradient(180deg,rgba(20,184,166,.28) 0%,rgba(20,184,166,.16) 100%);
  --ed-pebble-draw-hover-ink:#8FF0E2;
  --ed-pebble-find-ink:#C7B8FF;
  --ed-pebble-find-hover:linear-gradient(180deg,rgba(139,108,255,.32) 0%,rgba(139,108,255,.20) 100%);
  --ed-pebble-find-hover-ink:#D6CBFF;
  --edbar-ink:#E6E8EE;
  --edbar-ink3:#9AA3B2;
}

/* 그룹 = 긴 캡슐 하나 */
#editorView .editor-toolbar .tb-mid .tb-group,
#editorView .editor-toolbar .tb-right>.tb-group{
  display:flex!important;align-items:center!important;flex-wrap:nowrap!important;
  height:44px!important;min-height:44px!important;
  padding:3px 4px!important;gap:1px!important;
  border:1px solid var(--ed-pebble-border)!important;border-radius:999px!important;
  background:var(--ed-pebble-bg)!important;
  box-shadow:var(--ed-pebble-shadow)!important;
  backdrop-filter:blur(12px) saturate(145%);-webkit-backdrop-filter:blur(12px) saturate(145%);
}
/* 캡슐 안 버튼: 개별 테두리·그림자 제거, 가운데 정렬된 원형 hover */
#editorView .editor-toolbar .tb-group .tool-btn{
  width:34px!important;min-width:34px!important;height:34px!important;min-height:34px!important;
  border:0!important;border-radius:999px!important;background:transparent!important;
  box-shadow:none!important;transform:none!important;
}
#editorView .editor-toolbar .tb-group .tool-btn:hover{
  background:var(--tb-hover,var(--ed-pebble-subtle))!important;
  border-color:transparent!important;box-shadow:none!important;transform:none!important;
  color:var(--tb-hover-ink,var(--ed-pebble-ink-strong))!important;
}
#editorView .editor-toolbar .tb-group .tool-btn:active{transform:scale(.92)!important;}
#editorView .editor-toolbar .tb-group .tool-btn.active{
  background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 88%,#fff 12%),var(--accent))!important;
  color:#fff!important;border-color:transparent!important;
  box-shadow:0 4px 12px -3px color-mix(in srgb,var(--accent) 50%,transparent),inset 0 1px 0 rgba(255,255,255,.35)!important;
}
#editorView .editor-toolbar .tb-group .tool-btn:disabled{opacity:.4!important;background:transparent!important;}
/* 글꼴 · 글자 크기 · 색 분할 버튼도 캡슐 안 칩으로 */
#editorView .editor-toolbar .tb-group .font-btn,
#editorView .editor-toolbar .tb-group #fsInput{
  height:36px!important;min-height:36px!important;border:0!important;border-radius:999px!important;
  background:var(--ed-pebble-subtle)!important;box-shadow:none!important;
}
#editorView .editor-toolbar .tb-group .split-btn{
  height:36px;border:0!important;background:transparent!important;box-shadow:none!important;
}
#editorView .editor-toolbar .tb-group .split-btn .main,
#editorView .editor-toolbar .tb-group .split-btn .caret{
  height:36px!important;min-height:36px!important;border:0!important;background:transparent!important;box-shadow:none!important;
}
#editorView .editor-toolbar .tb-group .split-btn .main:hover,
#editorView .editor-toolbar .tb-group .split-btn .caret:hover{background:var(--ed-pebble-subtle)!important;}
/* 가운데 묶음끼리 겹치지 않도록 간격을 줄인다 (좁은 데스크톱 폭 대응) */
#editorView .editor-toolbar .tb-mid{gap:6px!important;}
/* 좁은 화면: 묶음 캡슐은 제 폭을 유지하고 가운데 줄만 가로로 스크롤한다 */
@media (max-width:700px){
  #editorView .editor-toolbar .tb-mid{
    flex-wrap:nowrap!important;justify-content:flex-start!important;overflow-x:auto!important;
    scrollbar-width:none;width:100%;
  }
  #editorView .editor-toolbar .tb-mid::-webkit-scrollbar{display:none;}
  #editorView .editor-toolbar .tb-mid .tb-group{flex:0 0 auto!important;width:auto!important;}
  #editorView .editor-toolbar .tb-group .tool-btn{width:36px!important;min-width:36px!important;}
}

/* ════════════════════════════════════════════════════════════════════════
   15.42.16 · 편집기 안의 선택 패널 — 다크 테마 통일
   편집기(#editorView)는 sdy-editor-light(라이트 토큰) 범위라 다크 테마에서도
   툴바·종이가 밝게 남는데, 그림 도구 막대의 색상판·글꼴 메뉴·내보내기·중요어
   분석·수식 모달은 그 범위 안팎에 있어 혼자 흰색으로 떠 다른 곳과 안 맞았다.
   툴바(위 조약돌 블록)처럼 이 패널들에 직접 다크 토큰을 얹어 통일한다 —
   토큰을 패널 요소에 다시 물려주므로 패널 안의 var(--text1)·var(--bg2)·
   var(--card)·var(--border)·var(--accent) 가 모두 다크 값으로 풀린다
   (인라인 스타일로 쓴 var() 도 같이).
   ════════════════════════════════════════════════════════════════════════ */

/* ── 펜·형광펜 색상판(그림 도구 막대) ─────────────────────────────── */
html.theme-pro.theme-dark #editorView .draw-toolbar{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-color:var(--oui-line);
}
/* 그림 도구막대가 쓰는 조약돌(pebble) 표면 토큰(--ed-pebble-bg)은
   :root·sdy-editor-light 에만 (라이트) 정의되어 다크에서 흰 캡슐이 되었다.
   툴바(.editor-toolbar)와 똑같이 다크 pebble 토큰을 툴바 위에 얹는다. */
html.theme-pro.theme-dark #editorView .draw-toolbar{
  --ed-pebble-bg:linear-gradient(180deg,rgba(54,58,68,.97) 0%,rgba(36,39,47,.97) 100%);
  --ed-pebble-bg-hover:linear-gradient(180deg,rgba(66,71,83,.98) 0%,rgba(46,50,60,.98) 100%);
  --ed-pebble-bg-focus:linear-gradient(180deg,rgba(74,79,92,.98) 0%,rgba(54,58,68,.98) 100%);
  --ed-pebble-border:rgba(255,255,255,.12);
  --ed-pebble-border-hover:rgba(255,255,255,.22);
  --ed-pebble-ink:#E6E8EE;
  --ed-pebble-ink-strong:#FFFFFF;
  --ed-pebble-ink3:#9AA3B2;
  --ed-pebble-subtle:rgba(255,255,255,.08);
  --ed-pebble-sep:rgba(255,255,255,.14);
  --ed-pebble-shadow:0 6px 16px -4px rgba(0,0,0,.55),0 2px 4px rgba(0,0,0,.35),inset 0 1px 0 rgba(255,255,255,.07);
  --ed-pebble-shadow-hover:0 9px 20px -4px rgba(0,0,0,.6),0 3px 6px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.10);
}
html.theme-pro.theme-dark #editorView .draw-toolbar .dt-colors{
  background:#1B1E23;
}
html.theme-pro.theme-dark #editorView .draw-toolbar .dt-colors .color-pick{
  border:2px solid #2B2F37;
}
html.theme-pro.theme-dark #editorView .draw-toolbar .dt-colors .color-pick.sel{
  border-color:#2B2F37;
}
html.theme-pro.theme-dark #editorView #penCustom.color-pick{
  border:2px solid #2B2F37;
  background:conic-gradient(from 210deg,#571919,#574119,#574D19,#195730,#193957,#361957,#571919);
}
html.theme-pro.theme-dark #editorView #penCustom.color-pick.sel{
  border-color:#2B2F37;
}
html.theme-pro.theme-dark #editorView .draw-toolbar .color-pick:hover{
  border-color:#2B2F37;
}

/* ── 글자색·형광펜 색상 팝오버 ────────────────────────────────────── */
html.theme-pro.theme-dark .color-popover{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-color:var(--oui-line);
  box-shadow:var(--oui-shadow-lg);
}

/* ── 글꼴 선택판 ─────────────────────────────────────────────────── */
html.theme-pro.theme-dark #editorView .font-menu{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-color:var(--oui-line);
  box-shadow:var(--oui-shadow-lg);
}

/* ── 내보내기 모달 ───────────────────────────────────────────────── */
html.theme-pro.theme-dark #exportModal{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
}
html.theme-pro.theme-dark #exportModal .modal-box{
  background:var(--oui-surf);border:1px solid var(--oui-line);
  box-shadow:var(--oui-shadow-lg)!important;
}
html.theme-pro.theme-dark #exportModal .modal-box h3{color:var(--oui-t1);}
html.theme-pro.theme-dark #exportModal .size-preset-card{
  background:var(--oui-surf2);border-color:var(--oui-line);
}
html.theme-pro.theme-dark #exportModal .size-preset-card:hover{
  border-color:var(--oui-acc-line);
  box-shadow:0 0 0 3px var(--oui-acc-soft);
}

/* ── 중요어 분석 막대 + 옆 패널(중요어 분석표) ─────────────────────── */
html.theme-pro.theme-dark #wfBar{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-color:var(--oui-line);color:var(--oui-t1);
}
/* 15.42.16 · 표 막대·찾기 막대도 같은 흰 조약돌 계통이라 다크에 맞춘다
   (html.theme-pro .tbl-bar·.find-bar·.wf-bar 가 공통으로 rgba(255,255,255,.96) 을
   박아두었기 때문 — 여기서 표·찾기 막대만 덮으면 wfBar 와 색이 어긋난다). */
html.theme-pro.theme-dark #tblBar{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-color:var(--oui-line);
}
html.theme-pro.theme-dark #findBar{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-color:var(--oui-line);
}
html.theme-pro.theme-dark #editorView .side-panel{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
  background:var(--oui-surf);border-right-color:var(--oui-line);
}

/* ── 수식(LaTeX) 모달 ─────────────────────────────────────────────── */
html.theme-pro.theme-dark #latexModal{
  --bg:var(--oui-surf);--text1:var(--oui-t1);--text2:var(--oui-t2);--text3:var(--oui-t3);
  --bg2:var(--oui-surf2);--card:var(--oui-surf);--border:var(--oui-line);
  --accent:var(--oui-acc);
}
html.theme-pro.theme-dark #latexModal .modal-box{
  background:var(--oui-surf);border:1px solid var(--oui-line);
  box-shadow:var(--oui-shadow-lg)!important;
}
html.theme-pro.theme-dark #latexModal .latex-input{
  background:var(--oui-surf2);border-color:var(--oui-line);color:var(--oui-t1);
}

/* ═══════════════════════════════════════════════════════════════════════
   15.50.6 · 터치 기기 편집기/도구 서랍 마감
   sdy-touch-device 는 coarse-touch 기기와 iPadOS 데스크톱 모드를 함께 잡는다.
   폭 상한을 두어 포인터:fine 데스크톱 레이아웃은 이 블록의 영향을 받지 않는다.
   ═══════════════════════════════════════════════════════════════════════ */
@media (max-width:1536px){
  /* 요소 몸통에서 시작한 세로 팬은 종이의 편집 동작보다 본문 스크롤에 양보한다.
     별도 손잡이(.handle/.tb-edge/.tb-move)는 기존 touch-action:none 을 유지한다. */
  html.sdy-touch-device #editorView #editorBody .tb,
  html.sdy-touch-device #editorView #editorBody .paper-img{
    touch-action:pan-y!important;
  }
  html.sdy-touch-device #editorView #editorBody,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-body{
    -webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-body{touch-action:pan-y;}
}

/* 폰: 두 줄 도구막대의 캡슐과 주요 버튼을 손가락 터치에 맞춘다. */
@media (max-width:640px), (max-height:560px) and (pointer:coarse){
  html.sdy-touch-device #editorView .editor-toolbar .tb-mid .tb-group,
  html.sdy-touch-device #editorView .editor-toolbar .tb-right>.tb-group{
    height:48px!important;min-height:48px!important;padding:3px 5px!important;
  }
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .tool-btn{
    width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;
  }
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .font-btn,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group #fsInput,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .main,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .caret{
    height:40px!important;min-height:40px!important;
  }
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .main{width:40px!important;min-width:40px!important;}
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .caret{min-width:32px!important;}
  html.sdy-touch-device #editorView .editor-body{padding-top:calc(max(6px,var(--ph-top)) + 108px)!important;}
  html.sdy-touch-device #editorView .draw-toolbar .tool-btn{
    width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;
  }
  html.sdy-touch-device #editorView .draw-toolbar .color-pick,
  html.sdy-touch-device #editorView .draw-toolbar .size-opt{
    width:38px;min-width:38px;height:38px;min-height:38px;
  }

  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub{
    width:100%;max-width:none;border-left:0;box-shadow:none;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-head{
    padding:max(18px,calc(env(safe-area-inset-top,0px) + 12px)) 16px 10px;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-x{
    width:44px;height:44px;min-width:44px;min-height:44px;border-radius:13px;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-body{
    padding:4px 16px calc(20px + env(safe-area-inset-bottom,0px));touch-action:pan-y;
    -webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-settings{min-height:56px;padding:12px 14px;}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-chip{min-height:48px;padding:12px;}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .nf-btn-slot .tool-btn,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .nf-avatar-slot .acc-btn,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick>.nf-row{
    width:44px;height:44px;min-width:44px;min-height:44px;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .offline-badge,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .nf-clock,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick>.nf-server{height:44px;min-height:44px;}
}

/* iPad: 폭을 조금 넓히고 한 줄 툴바의 실제 조작 타깃을 44px로 통일한다. */
@media (min-width:641px) and (max-width:1536px) and (min-height:561px){
  html.sdy-touch-device #editorView .editor-toolbar .tb-mid .tb-group,
  html.sdy-touch-device #editorView .editor-toolbar .tb-right>.tb-group{
    height:52px!important;min-height:52px!important;padding:3px 5px!important;
  }
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .tool-btn{
    width:44px!important;min-width:44px!important;height:44px!important;min-height:44px!important;
  }
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .font-btn,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group #fsInput,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .main,
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .caret{
    height:44px!important;min-height:44px!important;
  }
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .main{width:44px!important;min-width:44px!important;}
  html.sdy-touch-device #editorView .editor-toolbar .tb-group .split-btn .caret{min-width:40px!important;}
  html.sdy-touch-device #editorView .editor-toolbar .pg-nav{height:52px!important;min-height:52px!important;padding:4px 8px!important;}
  html.sdy-touch-device #editorView .editor-toolbar .pg-nav button{width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;}
  html.sdy-touch-device #editorView .editor-toolbar .pg-nav input{height:40px!important;min-height:40px!important;}
  html.sdy-touch-device #editorView .editor-body{padding-top:78px!important;}
  html.sdy-touch-device #editorView .draw-toolbar .tool-btn{
    width:44px!important;min-width:44px!important;height:44px!important;min-height:44px!important;
  }
  html.sdy-touch-device #editorView .draw-toolbar .color-pick,
  html.sdy-touch-device #editorView .draw-toolbar .size-opt{
    width:40px;min-width:40px;height:40px;min-height:40px;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub{width:min(420px,50vw);}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-head{padding:calc(env(safe-area-inset-top,0px) + 14px) 24px 12px;}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-body{
    padding:8px 22px calc(24px + env(safe-area-inset-bottom,0px));touch-action:pan-y;
    -webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-x{width:44px;height:44px;}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-settings{min-height:60px;padding:14px;}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-chip{min-height:52px;padding:13px;}
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .nf-btn-slot .tool-btn,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .nf-avatar-slot .acc-btn,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick>.nf-row{
    width:44px;height:44px;min-width:44px;min-height:44px;
  }
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .offline-badge,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick .nf-clock,
  html.sdy-touch-device.theme-pro body.sdy-min .sdy-hub-quick>.nf-server{height:44px;min-height:44px;}
}

/* 15.50.7 · 좁은 미니멀 홈에서는 북마크 목록을 도구 서랍 안의 흐름으로 둔다.
   기존 10.0 모바일 규칙은 접힌 사이드바용으로 #proBookmarkSlot 을 fixed popover로
   띄운다. 미니멀 홈은 그 슬롯을 서랍으로 옮기므로 팝오버 좌표를 초기화해야 한다. */
@media (max-width:1023px){
  html.theme-pro body.sdy-min #sdyHubBookmarks{max-height:none;overflow:visible;}
  html.theme-pro body.sdy-min #sdyHubBookmarks #proBookmarkSlot{
    position:static;inset:auto;left:auto;top:auto;right:auto;bottom:auto;
    z-index:auto;width:100%;max-width:none;max-height:min(280px,38dvh);
    margin:0;padding:2px 4px 8px;overflow-y:auto;overflow-x:hidden;
    overscroll-behavior:contain;scrollbar-width:thin;
    background:transparent;border:0;border-radius:0;box-shadow:none;
  }
}
