/* 크라우니고딕 자체 서빙 (벤치-0930): --nt-font 가 '크라우니고딕' 을 쓰는데 @font-face 가 없어 전 화면이 시스템 폰트로 폴백되던 결함 수리.
   서브셋 사본(assets/fonts, 합 282,796B) — 원본=/Users/ef/crowny-fonts/web-vf-subset/. 라틴 + 한글 상용 1,026자(tier1 300 + tier2 726), 그 밖의 한글은 system-ui 로 글자 단위 폴백.
   가변축 wght 기본값 400 이라 wght 매핑 미지원 엔진에서도 헤어라인이 아닌 보통 굵기로 나온다. ASCII 경로. */
@font-face{font-family:'크라우니고딕';src:url('../assets/fonts/CrownyGothic-VF-latin.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+0020-007E,U+00A0-00FF,U+2010-2027,U+2030-205E,U+20A9,U+2190-2193,U+2600-27BF,U+3131-318E,U+E000-F8FF;}
@font-face{font-family:'크라우니고딕';src:url('../assets/fonts/CrownyGothic-VF-hangul_tier1.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+AC00-AC01,U+AC04,U+AC10,U+AC15,U+AC1C,U+AC70,U+AC74,U+AC80,U+AC83,U+AC8C,U+ACA9,U+ACAC,U+ACB0,U+ACBD,U+ACC4,U+ACE0,U+ACF5,U+ACFC,U+AD00,U+AD50,U+AD6C-AD6D,U+AD8C,U+ADDC,U+ADE0,U+ADF8,U+ADFC,U+AE00,U+AE08-AE09,U+AE30,U+AE4C,U+AED8,U+B098,U+B0A8,U+B0B4,U+B108,U+B110,U+B124,U+B178,U+B294,U+B298,U+B2A5,U+B2C8,U+B2E4,U+B2E8,U+B2EC,U+B2F4-B2F5,U+B2F9,U+B300,U+B354,U+B370,U+B378,U+B3C4-B3C5,U+B3D9,U+B418,U+B41C,U+B429,U+B4DC,U+B4E0,U+B4E4,U+B4F1,U+B514,U+B529,U+B77C-B77D,U+B78C,U+B798,U+B79C,U+B7C9,U+B7EC,U+B808,U+B80C,U+B824-B825,U+B85C-B85D,U+B860,U+B8CC,U+B8E8,U+B958,U+B97C,U+B984,U+B9AC,U+B9BD,U+B9C1,U+B9C8,U+B9CC,U+B9D0,U+B9E4,U+BA54,U+BA70,U+BA74,U+BA85,U+BAA8-BAA9,U+BB34,U+BB38,U+BBF8,U+BC14,U+BC18,U+BC1B-BC1C,U+BC29,U+BC30-BC31,U+BC84,U+BC88,U+BC95,U+BCA8,U+BCC0,U+BCC4,U+BCF4-BCF5,U+BCF8,U+BD80,U+BD84,U+BD88,U+BE0C,U+BE14,U+BE44,U+C0AC,U+C0B0,U+C0C1,U+C0C8-C0C9,U+C0DD,U+C11C-C11D,U+C120,U+C124,U+C131,U+C138,U+C140,U+C158,U+C18C-C18D,U+C190,U+C218,U+C21C,U+C220,U+C2A4,U+C2AC,U+C2B5,U+C2B9,U+C2DC-C2DD,U+C2E0,U+C2E4,U+C2EC,U+C528,U+C544,U+C548,U+C54A,U+C561,U+C57D,U+C591,U+C5B4,U+C5B8,U+C5C5-C5C6,U+C5D0,U+C5D4,U+C5EC-C5ED,U+C5F0,U+C5F4,U+C601,U+C608,U+C624,U+C634,U+C640,U+C644,U+C678,U+C694,U+C6A9,U+C6B0,U+C6B4,U+C6CC,U+C6D0,U+C6D4,U+C6E8,U+C704,U+C720,U+C73C,U+C740,U+C744,U+C74C,U+C751,U+C758,U+C774,U+C778,U+C77C,U+C784-C785,U+C788,U+C790-C791,U+C7A5,U+C7AC,U+C800-C801,U+C804,U+C810-C811,U+C815,U+C81C-C81D,U+C870,U+C874,U+C885,U+C8FC,U+C900,U+C911,U+C950,U+C988,U+C99D,U+C9C0-C9C1,U+C9C4,U+C9C8,U+C9D1,U+CC28,U+CC3D,U+CC44,U+CC98,U+CC9C,U+CCAD,U+CCB4,U+CCC7,U+CD08,U+CD5C,U+CD94-CD95,U+CD9C,U+CE21,U+CE58-CE59,U+CE74,U+CEE4,U+CF00,U+CF54,U+CF58,U+D034,U+D06C,U+D070,U+D074,U+D0A4,U+D0C0,U+D0DC-D0DD,U+D130,U+D14C,U+D150,U+D15C,U+D1A0,U+D1B5,U+D22C,U+D2B8,U+D2F0,U+D300,U+D305,U+D30C,U+D310,U+D328,U+D398,U+D3B8,U+D3C9,U+D3EC,U+D45C,U+D488,U+D504,U+D50C,U+D53C,U+D544,U+D558-D559,U+D55C,U+D560,U+D568-D569,U+D56D,U+D574,U+D589,U+D5A5,U+D5C8,U+D5CC,U+D5D8,U+D604,U+D615,U+D638,U+D654-D655,U+D658,U+D68C,U+D6C4,U+D788;}
@font-face{font-family:'크라우니고딕';src:url('../assets/fonts/CrownyGothic-VF-hangul_tier2.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+AC08,U+AC11-AC13,U+AC16,U+AC19,U+AC1D,U+AC24,U+AC2D,U+AC31,U+AC77-AC78,U+AC81,U+AC94,U+AC9F-ACA0,U+ACA8,U+ACB8-ACB9,U+ACBC,U+ACC1,U+ACE1,U+ACE4,U+ACE7-ACE8,U+ACF1,U+ACF3,U+ACFD,U+AD04,U+AD11,U+AD1C,U+AD34,U+AD70,U+AD73-AD76,U+AD7D,U+AD81,U+ADA4,U+ADC0,U+ADF9,U+AE0B,U+AE0D,U+AE34,U+AE38,U+AE40-AE41,U+AE43,U+AE45,U+AE4A,U+AE4E,U+AE54,U+AE5D,U+AE68,U+AEBC,U+AECD,U+AEF4,U+AF2C-AF2D,U+AF43,U+AF49,U+AFB8,U+AFBC,U+AFC0,U+AFC8-AFC9,U+AFD4,U+AFF0,U+B00C,U+B01D,U+B044,U+B048,U+B04A,U+B04C,U+B054,U+B057,U+B05D,U+B07C,U+B084,U+B08C-B08D,U+B099,U+B09C,U+B0A0,U+B0A9,U+B0AB-B0AE,U+B0B3,U+B0B8,U+B0BC,U+B0C5,U+B0C8-B0C9,U+B0D0,U+B0E5,U+B10C,U+B113,U+B118,U+B11B,U+B123,U+B125,U+B137,U+B141,U+B144,U+B150,U+B155,U+B179,U+B17C,U+B180,U+B18D,U+B192-B193,U+B1CC,U+B1FD,U+B204-B205,U+B208,U+B20C,U+B214-B215,U+B220,U+B234,U+B258,U+B25C,U+B269,U+B274,U+B290,U+B2C9,U+B2CC,U+B2D0,U+B2D8-B2D9,U+B2DD,U+B2E5,U+B2EB,U+B2EE,U+B2F7,U+B2FF,U+B311,U+B313,U+B355,U+B358,U+B364,U+B367,U+B36E,U+B371,U+B374,U+B3A0,U+B3C8,U+B3CB-B3CC,U+B3D5,U+B3DB,U+B3FC,U+B410,U+B420,U+B428,U+B450-B451,U+B454,U+B458,U+B465,U+B46C,U+B480,U+B4A4,U+B4B7,U+B4C0,U+B4C8,U+B4DD,U+B4E3,U+B4EC-B4ED,U+B4EF,U+B515,U+B51C,U+B524-B525,U+B527,U+B530-B531,U+B538,U+B545,U+B54C,U+B550,U+B55C,U+B55F-B560,U+B5A0-B5A1,U+B5A4,U+B5A8,U+B5BB,U+B5C0,U+B610-B611,U+B69C,U+B6AB,U+B728,U+B739,U+B73B,U+B744,U+B748,U+B780,U+B784,U+B78D,U+B790-B791,U+B799,U+B7A8-B7A9,U+B7AB-B7AD,U+B7B5,U+B7ED,U+B7F0,U+B7F4,U+B7FC-B7FD,U+B7FF,U+B807,U+B809,U+B818,U+B81B,U+B828,U+B82C,U+B834-B835,U+B837-B839,U+B840,U+B864,U+B86C-B86D,U+B86F,U+B871,U+B8B0,U+B8E1,U+B8EC,U+B8F0,U+B8F8-B8F9,U+B8FB,U+B904,U+B944,U+B960,U+B968,U+B974,U+B978,U+B985,U+B9AD,U+B9B0,U+B9B4,U+B9BC,U+B9BF,U+B9C9,U+B9CE,U+B9D1,U+B9D8,U+B9DB,U+B9DD-B9DE,U+B9E1,U+B9E5,U+B9E8,U+B9F5,U+B9F7,U+B9F9-B9FA,U+BA38,U+BA3C,U+BA40,U+BA48,U+BA4B,U+BA58,U+BA5C,U+BA64,U+BA71,U+BA78,U+BA87,U+BAAB-BAAC,U+BAB0,U+BAB8,U+BABB,U+BABD,U+BB35-BB36,U+BB3B-BB3C,U+BB45,U+BB50,U+BB54,U+BBA4,U+BBAC,U+BBC0,U+BBF9,U+BBFC,U+BBFF-BC00,U+BC0B,U+BC0D,U+BC0F,U+BC15-BC16,U+BC1D,U+BC24,U+BC2D,U+BC34,U+BC38,U+BC43,U+BC45,U+BC8C,U+BC94,U+BC97,U+BCA0-BCA1,U+BCA4,U+BCB3,U+BCBC-BCBD,U+BCCD,U+BCD1,U+BCF6,U+BCFC,U+BD04-BD05,U+BD07,U+BD09,U+BD10,U+BD59,U+BD81,U+BD89,U+BD93,U+BD95,U+BD99,U+BDF0,U+BE48,U+BE4C,U+BE59-BE5B,U+BE60,U+BE68,U+BE7C,U+BEA8,U+BF40,U+BFB0,U+BFCC,U+BFD0,U+C05C,U+C068-C069,U+C0AD,U+C0B4,U+C0B6,U+C0BC-C0BD,U+C0C0,U+C0CC,U+C0D0,U+C0D8,U+C0E4,U+C0F4-C0F5,U+C0F7,U+C11E,U+C12C-C12D,U+C12F-C130,U+C139,U+C13C,U+C148-C149,U+C14B,U+C154,U+C15C,U+C168,U+C178,U+C194,U+C1A1,U+C1C4,U+C1E0,U+C1FC,U+C20F,U+C219,U+C228,U+C22B,U+C22D,U+C22F,U+C250,U+C26C,U+C27D,U+C288,U+C2A8,U+C2B4,U+C2B7,U+C2E3,U+C2ED,U+C2EF,U+C2F1,U+C2F6,U+C2F8-C2F9,U+C309,U+C30D,U+C313,U+C368,U+C36C,U+C378,U+C3D9,U+C4F0,U+C4F4,U+C4F8,U+C500-C501,U+C50C,U+C529,U+C52C,U+C53D,U+C545,U+C54C,U+C54E,U+C554-C555,U+C557-C559,U+C55E,U+C560,U+C564,U+C568,U+C571,U+C575,U+C57C,U+C580,U+C587,U+C5B5,U+C5B9,U+C5BC,U+C5C4,U+C5C7-C5C8,U+C5CE,U+C5D1,U+C5D8,U+C5E0-C5E1,U+C5E3,U+C5EE,U+C5FC-C5FD,U+C5FF-C600,U+C606-C607,U+C610,U+C625,U+C628,U+C62C,U+C62E,U+C633,U+C635,U+C651,U+C654-C655,U+C65C,U+C67C,U+C695,U+C6B1,U+C6B8,U+C6C0-C6C1,U+C6C3,U+C6C5,U+C6DC,U+C6E0,U+C6F9,U+C708,U+C70C,U+C715,U+C721,U+C724,U+C728,U+C735,U+C775,U+C77D,U+C783,U+C787,U+C789-C78A,U+C78E,U+C794,U+C798,U+C7A0-C7A1,U+C7AD,U+C7C1,U+C808,U+C80A,U+C813,U+C816,U+C820,U+C82F,U+C838,U+C84C,U+C871,U+C878,U+C881,U+C88B-C88C,U+C8C4,U+C8E0,U+C8FD,U+C904,U+C90C-C90D,U+C918,U+C989,U+C98C,U+C990,U+C998-C999,U+C9D0,U+C9D3,U+C9D5,U+C9D9-C9DA,U+C9DC-C9DD,U+C9E0,U+C9E4,U+C9E7,U+C9ED,U+C9F8,U+CABD,U+CC0C-CC0D,U+CC1C,U+CC29,U+CC2C,U+CC2E,U+CC30,U+CC38,U+CC3E,U+CC45,U+CC4C,U+CC55,U+CC57,U+CC59,U+CC99,U+CCA0,U+CCA8-CCA9,U+CCAB,U+CCB8,U+CCD0,U+CCE4,U+CD09,U+CD0C,U+CD18,U+CD1D,U+CD2C,U+CD98,U+CDA4-CDA5,U+CDA9,U+CDB0,U+CDE8,U+CE20,U+CE35,U+CE5C,U+CE60,U+CE68-CE69,U+CE6B,U+CE6D,U+CE75,U+CE78,U+CE90,U+CE94,U+CE98,U+CEA0-CEA1,U+CEE8,U+CEEC,U+CEF4,U+CEF7,U+CF08,U+CF13,U+CF1C,U+CF24,U+CF30,U+CF55,U+CF5C,U+CF64-CF65,U+CF8C,U+CFE0,U+CFE8,U+CFFC,U+D004,U+D018,U+D050,U+D058,U+D07C,U+D0A5,U+D0A8,U+D0AC,U+D0B4-D0B5,U+D0B7,U+D0B9,U+D0C1,U+D0C4,U+D0C8,U+D0D0-D0D1,U+D0D5,U+D0E0,U+D0EC-D0ED,U+D0F1,U+D131,U+D134,U+D138,U+D140-D141,U+D14D,U+D154,U+D15D,U+D1A1,U+D1A4,U+D1A8,U+D1B1,U+D1F4,U+D230,U+D234,U+D29C,U+D2B9,U+D2BC,U+D2C0,U+D2F1,U+D2F4,U+D2F8,U+D314,U+D31C-D31D,U+D31F,U+D329,U+D32C,U+D338,U+D33D,U+D37C,U+D380,U+D384,U+D38C,U+D399,U+D39C,U+D3B4,U+D3BC,U+D3D0,U+D3ED,U+D3F0,U+D3F4,U+D3FC,U+D478,U+D480,U+D48B,U+D48D,U+D4E8,U+D508,U+D53D,U+D540,U+D54D,U+D54F,U+D551,U+D56B,U+D575,U+D578,U+D587-D588,U+D5D0,U+D5E4,U+D5EC,U+D600-D601,U+D611,U+D614,U+D61C,U+D639,U+D63C,U+D640,U+D648-D649,U+D64D,U+D65C,U+D669,U+D68D,U+D69F,U+D6A8,U+D6C5,U+D6C8,U+D718,U+D720,U+D734,U+D750-D751,U+D754,U+D758-D759,U+D761,U+D765,U+D769,U+D76C,U+D770,U+D78C,U+D790,U+D798-D799,U+D79D;}
/* 별칭 @font-face (벤치W2-0930): 물빛.css(클로드디자인 정본)가 화면 글자를 "Noto Sans KR"로 지정하지만 그 서체는 미선언·미설치라 시스템 폰트로 폴백됐다.
   정본 CSS 무수정 원칙에 따라 그 이름을 크라우니고딕 서브셋으로 채운다(셀렉터 override 없음). */
@font-face{font-family:'Noto Sans KR';src:url('../assets/fonts/CrownyGothic-VF-latin.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+0020-007E,U+00A0-00FF,U+2010-2027,U+2030-205E,U+20A9,U+2190-2193,U+2600-27BF,U+3131-318E,U+E000-F8FF;}
@font-face{font-family:'Noto Sans KR';src:url('../assets/fonts/CrownyGothic-VF-hangul_tier1.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+AC00-AC01,U+AC04,U+AC10,U+AC15,U+AC1C,U+AC70,U+AC74,U+AC80,U+AC83,U+AC8C,U+ACA9,U+ACAC,U+ACB0,U+ACBD,U+ACC4,U+ACE0,U+ACF5,U+ACFC,U+AD00,U+AD50,U+AD6C-AD6D,U+AD8C,U+ADDC,U+ADE0,U+ADF8,U+ADFC,U+AE00,U+AE08-AE09,U+AE30,U+AE4C,U+AED8,U+B098,U+B0A8,U+B0B4,U+B108,U+B110,U+B124,U+B178,U+B294,U+B298,U+B2A5,U+B2C8,U+B2E4,U+B2E8,U+B2EC,U+B2F4-B2F5,U+B2F9,U+B300,U+B354,U+B370,U+B378,U+B3C4-B3C5,U+B3D9,U+B418,U+B41C,U+B429,U+B4DC,U+B4E0,U+B4E4,U+B4F1,U+B514,U+B529,U+B77C-B77D,U+B78C,U+B798,U+B79C,U+B7C9,U+B7EC,U+B808,U+B80C,U+B824-B825,U+B85C-B85D,U+B860,U+B8CC,U+B8E8,U+B958,U+B97C,U+B984,U+B9AC,U+B9BD,U+B9C1,U+B9C8,U+B9CC,U+B9D0,U+B9E4,U+BA54,U+BA70,U+BA74,U+BA85,U+BAA8-BAA9,U+BB34,U+BB38,U+BBF8,U+BC14,U+BC18,U+BC1B-BC1C,U+BC29,U+BC30-BC31,U+BC84,U+BC88,U+BC95,U+BCA8,U+BCC0,U+BCC4,U+BCF4-BCF5,U+BCF8,U+BD80,U+BD84,U+BD88,U+BE0C,U+BE14,U+BE44,U+C0AC,U+C0B0,U+C0C1,U+C0C8-C0C9,U+C0DD,U+C11C-C11D,U+C120,U+C124,U+C131,U+C138,U+C140,U+C158,U+C18C-C18D,U+C190,U+C218,U+C21C,U+C220,U+C2A4,U+C2AC,U+C2B5,U+C2B9,U+C2DC-C2DD,U+C2E0,U+C2E4,U+C2EC,U+C528,U+C544,U+C548,U+C54A,U+C561,U+C57D,U+C591,U+C5B4,U+C5B8,U+C5C5-C5C6,U+C5D0,U+C5D4,U+C5EC-C5ED,U+C5F0,U+C5F4,U+C601,U+C608,U+C624,U+C634,U+C640,U+C644,U+C678,U+C694,U+C6A9,U+C6B0,U+C6B4,U+C6CC,U+C6D0,U+C6D4,U+C6E8,U+C704,U+C720,U+C73C,U+C740,U+C744,U+C74C,U+C751,U+C758,U+C774,U+C778,U+C77C,U+C784-C785,U+C788,U+C790-C791,U+C7A5,U+C7AC,U+C800-C801,U+C804,U+C810-C811,U+C815,U+C81C-C81D,U+C870,U+C874,U+C885,U+C8FC,U+C900,U+C911,U+C950,U+C988,U+C99D,U+C9C0-C9C1,U+C9C4,U+C9C8,U+C9D1,U+CC28,U+CC3D,U+CC44,U+CC98,U+CC9C,U+CCAD,U+CCB4,U+CCC7,U+CD08,U+CD5C,U+CD94-CD95,U+CD9C,U+CE21,U+CE58-CE59,U+CE74,U+CEE4,U+CF00,U+CF54,U+CF58,U+D034,U+D06C,U+D070,U+D074,U+D0A4,U+D0C0,U+D0DC-D0DD,U+D130,U+D14C,U+D150,U+D15C,U+D1A0,U+D1B5,U+D22C,U+D2B8,U+D2F0,U+D300,U+D305,U+D30C,U+D310,U+D328,U+D398,U+D3B8,U+D3C9,U+D3EC,U+D45C,U+D488,U+D504,U+D50C,U+D53C,U+D544,U+D558-D559,U+D55C,U+D560,U+D568-D569,U+D56D,U+D574,U+D589,U+D5A5,U+D5C8,U+D5CC,U+D5D8,U+D604,U+D615,U+D638,U+D654-D655,U+D658,U+D68C,U+D6C4,U+D788;}
@font-face{font-family:'Noto Sans KR';src:url('../assets/fonts/CrownyGothic-VF-hangul_tier2.woff2') format('woff2');font-weight:100 900;font-display:swap;unicode-range:U+AC08,U+AC11-AC13,U+AC16,U+AC19,U+AC1D,U+AC24,U+AC2D,U+AC31,U+AC77-AC78,U+AC81,U+AC94,U+AC9F-ACA0,U+ACA8,U+ACB8-ACB9,U+ACBC,U+ACC1,U+ACE1,U+ACE4,U+ACE7-ACE8,U+ACF1,U+ACF3,U+ACFD,U+AD04,U+AD11,U+AD1C,U+AD34,U+AD70,U+AD73-AD76,U+AD7D,U+AD81,U+ADA4,U+ADC0,U+ADF9,U+AE0B,U+AE0D,U+AE34,U+AE38,U+AE40-AE41,U+AE43,U+AE45,U+AE4A,U+AE4E,U+AE54,U+AE5D,U+AE68,U+AEBC,U+AECD,U+AEF4,U+AF2C-AF2D,U+AF43,U+AF49,U+AFB8,U+AFBC,U+AFC0,U+AFC8-AFC9,U+AFD4,U+AFF0,U+B00C,U+B01D,U+B044,U+B048,U+B04A,U+B04C,U+B054,U+B057,U+B05D,U+B07C,U+B084,U+B08C-B08D,U+B099,U+B09C,U+B0A0,U+B0A9,U+B0AB-B0AE,U+B0B3,U+B0B8,U+B0BC,U+B0C5,U+B0C8-B0C9,U+B0D0,U+B0E5,U+B10C,U+B113,U+B118,U+B11B,U+B123,U+B125,U+B137,U+B141,U+B144,U+B150,U+B155,U+B179,U+B17C,U+B180,U+B18D,U+B192-B193,U+B1CC,U+B1FD,U+B204-B205,U+B208,U+B20C,U+B214-B215,U+B220,U+B234,U+B258,U+B25C,U+B269,U+B274,U+B290,U+B2C9,U+B2CC,U+B2D0,U+B2D8-B2D9,U+B2DD,U+B2E5,U+B2EB,U+B2EE,U+B2F7,U+B2FF,U+B311,U+B313,U+B355,U+B358,U+B364,U+B367,U+B36E,U+B371,U+B374,U+B3A0,U+B3C8,U+B3CB-B3CC,U+B3D5,U+B3DB,U+B3FC,U+B410,U+B420,U+B428,U+B450-B451,U+B454,U+B458,U+B465,U+B46C,U+B480,U+B4A4,U+B4B7,U+B4C0,U+B4C8,U+B4DD,U+B4E3,U+B4EC-B4ED,U+B4EF,U+B515,U+B51C,U+B524-B525,U+B527,U+B530-B531,U+B538,U+B545,U+B54C,U+B550,U+B55C,U+B55F-B560,U+B5A0-B5A1,U+B5A4,U+B5A8,U+B5BB,U+B5C0,U+B610-B611,U+B69C,U+B6AB,U+B728,U+B739,U+B73B,U+B744,U+B748,U+B780,U+B784,U+B78D,U+B790-B791,U+B799,U+B7A8-B7A9,U+B7AB-B7AD,U+B7B5,U+B7ED,U+B7F0,U+B7F4,U+B7FC-B7FD,U+B7FF,U+B807,U+B809,U+B818,U+B81B,U+B828,U+B82C,U+B834-B835,U+B837-B839,U+B840,U+B864,U+B86C-B86D,U+B86F,U+B871,U+B8B0,U+B8E1,U+B8EC,U+B8F0,U+B8F8-B8F9,U+B8FB,U+B904,U+B944,U+B960,U+B968,U+B974,U+B978,U+B985,U+B9AD,U+B9B0,U+B9B4,U+B9BC,U+B9BF,U+B9C9,U+B9CE,U+B9D1,U+B9D8,U+B9DB,U+B9DD-B9DE,U+B9E1,U+B9E5,U+B9E8,U+B9F5,U+B9F7,U+B9F9-B9FA,U+BA38,U+BA3C,U+BA40,U+BA48,U+BA4B,U+BA58,U+BA5C,U+BA64,U+BA71,U+BA78,U+BA87,U+BAAB-BAAC,U+BAB0,U+BAB8,U+BABB,U+BABD,U+BB35-BB36,U+BB3B-BB3C,U+BB45,U+BB50,U+BB54,U+BBA4,U+BBAC,U+BBC0,U+BBF9,U+BBFC,U+BBFF-BC00,U+BC0B,U+BC0D,U+BC0F,U+BC15-BC16,U+BC1D,U+BC24,U+BC2D,U+BC34,U+BC38,U+BC43,U+BC45,U+BC8C,U+BC94,U+BC97,U+BCA0-BCA1,U+BCA4,U+BCB3,U+BCBC-BCBD,U+BCCD,U+BCD1,U+BCF6,U+BCFC,U+BD04-BD05,U+BD07,U+BD09,U+BD10,U+BD59,U+BD81,U+BD89,U+BD93,U+BD95,U+BD99,U+BDF0,U+BE48,U+BE4C,U+BE59-BE5B,U+BE60,U+BE68,U+BE7C,U+BEA8,U+BF40,U+BFB0,U+BFCC,U+BFD0,U+C05C,U+C068-C069,U+C0AD,U+C0B4,U+C0B6,U+C0BC-C0BD,U+C0C0,U+C0CC,U+C0D0,U+C0D8,U+C0E4,U+C0F4-C0F5,U+C0F7,U+C11E,U+C12C-C12D,U+C12F-C130,U+C139,U+C13C,U+C148-C149,U+C14B,U+C154,U+C15C,U+C168,U+C178,U+C194,U+C1A1,U+C1C4,U+C1E0,U+C1FC,U+C20F,U+C219,U+C228,U+C22B,U+C22D,U+C22F,U+C250,U+C26C,U+C27D,U+C288,U+C2A8,U+C2B4,U+C2B7,U+C2E3,U+C2ED,U+C2EF,U+C2F1,U+C2F6,U+C2F8-C2F9,U+C309,U+C30D,U+C313,U+C368,U+C36C,U+C378,U+C3D9,U+C4F0,U+C4F4,U+C4F8,U+C500-C501,U+C50C,U+C529,U+C52C,U+C53D,U+C545,U+C54C,U+C54E,U+C554-C555,U+C557-C559,U+C55E,U+C560,U+C564,U+C568,U+C571,U+C575,U+C57C,U+C580,U+C587,U+C5B5,U+C5B9,U+C5BC,U+C5C4,U+C5C7-C5C8,U+C5CE,U+C5D1,U+C5D8,U+C5E0-C5E1,U+C5E3,U+C5EE,U+C5FC-C5FD,U+C5FF-C600,U+C606-C607,U+C610,U+C625,U+C628,U+C62C,U+C62E,U+C633,U+C635,U+C651,U+C654-C655,U+C65C,U+C67C,U+C695,U+C6B1,U+C6B8,U+C6C0-C6C1,U+C6C3,U+C6C5,U+C6DC,U+C6E0,U+C6F9,U+C708,U+C70C,U+C715,U+C721,U+C724,U+C728,U+C735,U+C775,U+C77D,U+C783,U+C787,U+C789-C78A,U+C78E,U+C794,U+C798,U+C7A0-C7A1,U+C7AD,U+C7C1,U+C808,U+C80A,U+C813,U+C816,U+C820,U+C82F,U+C838,U+C84C,U+C871,U+C878,U+C881,U+C88B-C88C,U+C8C4,U+C8E0,U+C8FD,U+C904,U+C90C-C90D,U+C918,U+C989,U+C98C,U+C990,U+C998-C999,U+C9D0,U+C9D3,U+C9D5,U+C9D9-C9DA,U+C9DC-C9DD,U+C9E0,U+C9E4,U+C9E7,U+C9ED,U+C9F8,U+CABD,U+CC0C-CC0D,U+CC1C,U+CC29,U+CC2C,U+CC2E,U+CC30,U+CC38,U+CC3E,U+CC45,U+CC4C,U+CC55,U+CC57,U+CC59,U+CC99,U+CCA0,U+CCA8-CCA9,U+CCAB,U+CCB8,U+CCD0,U+CCE4,U+CD09,U+CD0C,U+CD18,U+CD1D,U+CD2C,U+CD98,U+CDA4-CDA5,U+CDA9,U+CDB0,U+CDE8,U+CE20,U+CE35,U+CE5C,U+CE60,U+CE68-CE69,U+CE6B,U+CE6D,U+CE75,U+CE78,U+CE90,U+CE94,U+CE98,U+CEA0-CEA1,U+CEE8,U+CEEC,U+CEF4,U+CEF7,U+CF08,U+CF13,U+CF1C,U+CF24,U+CF30,U+CF55,U+CF5C,U+CF64-CF65,U+CF8C,U+CFE0,U+CFE8,U+CFFC,U+D004,U+D018,U+D050,U+D058,U+D07C,U+D0A5,U+D0A8,U+D0AC,U+D0B4-D0B5,U+D0B7,U+D0B9,U+D0C1,U+D0C4,U+D0C8,U+D0D0-D0D1,U+D0D5,U+D0E0,U+D0EC-D0ED,U+D0F1,U+D131,U+D134,U+D138,U+D140-D141,U+D14D,U+D154,U+D15D,U+D1A1,U+D1A4,U+D1A8,U+D1B1,U+D1F4,U+D230,U+D234,U+D29C,U+D2B9,U+D2BC,U+D2C0,U+D2F1,U+D2F4,U+D2F8,U+D314,U+D31C-D31D,U+D31F,U+D329,U+D32C,U+D338,U+D33D,U+D37C,U+D380,U+D384,U+D38C,U+D399,U+D39C,U+D3B4,U+D3BC,U+D3D0,U+D3ED,U+D3F0,U+D3F4,U+D3FC,U+D478,U+D480,U+D48B,U+D48D,U+D4E8,U+D508,U+D53D,U+D540,U+D54D,U+D54F,U+D551,U+D56B,U+D575,U+D578,U+D587-D588,U+D5D0,U+D5E4,U+D5EC,U+D600-D601,U+D611,U+D614,U+D61C,U+D639,U+D63C,U+D640,U+D648-D649,U+D64D,U+D65C,U+D669,U+D68D,U+D69F,U+D6A8,U+D6C5,U+D6C8,U+D718,U+D720,U+D734,U+D750-D751,U+D754,U+D758-D759,U+D761,U+D765,U+D769,U+D76C,U+D770,U+D78C,U+D790,U+D798-D799,U+D79D;}
/* 신크라우니텔 W1 토큰 — 클로드디자인(크림 아이보리 x 초콜릿 x 골드) 발췌.
   전부 :root 정의 후 다크는 재정의(테마 3상태 안전). ASCII 경로. */
:root{
  --nt-bg:#F7F1E4;            /* 크림 아이보리 배경 */
  --nt-surface:#FFFFFF;
  --nt-ink:#3A2A1C;
  --nt-ink-strong:#4A2C1A;   /* 초콜릿 */
  --nt-muted:#6F6250;        /* 0930 셸v2: 보조 글자 대비 5.27:1(크림)·5.93:1(흰) — 구 #9A8B78 은 3.31:1 */
  --nt-line:#E7DCC7;
  --nt-accent:#C9A227;       /* 골드 — 채움·테두리·배지 배경 전용(글자에는 --nt-accent-text) */
  --nt-accent-text:#7F611A;  /* 0930 셸v2: 금색 글자(브랜드·링크·CRW·팩 가격) 5.14:1(크림)·5.79:1(흰) */
  --nt-on-accent:#2B2018;    /* 0930 셸v2: 금색 채움 위 글자 6.56:1 — 값은 --nt-bubble-me-ink 기본값과 동일(신규 색 없음). 사용자 말풍선 잉크 커스텀과 분리하려고 값으로 둔다 */
  --nt-on-ink:#FFFFFF;       /* 0930 셸v2: 짙은 갈색(--nt-ink-strong)·위험색 채움 위 글자 — 옛 --nt-on-accent 값 */
  --nt-lh-body:1.5;          /* 0930 셸v2: 본문 기본 행간(정본 CSS 가 행간을 지정한 요소는 그대로) */
  --nt-track:#EFE7D6;
  --nt-track-alt:#F1EADB;
  --nt-danger:#B4462F;
  /* W6: 화면 꾸미기 — 폰트/채팅배경/말풍선 색 사용자 토큰. 기본값=현행 그대로. */
  --nt-font:'크라우니고딕',system-ui,-apple-system,sans-serif;
  --nt-font-size:14px;
  --nt-chat-bg:var(--nt-bg);
  --nt-bubble-me:#F4E3B2;
  --nt-bubble-me-ink:#2B2018;
  --nt-bubble-peer:#FFFFFF;
  --nt-bubble-peer-ink:#2B2018;
  --nt-r-12:12px; --nt-r-16:16px; --nt-r-20:20px;
  --nt-h-tabbar:60px;
  --nt-safe-bottom:env(safe-area-inset-bottom,0px);
  --gold:var(--nt-accent-text);   /* 크라우니 아이콘 스프라이트 골드 스트로크 + 물빛 화면 브랜드/링크 글자(0930 셸v2: 글자 대비 위해 accent-text — 다크는 동일값) */
}
/* 크라우니 아이콘 — 스프라이트 <use> 공통. 이모지 대체. currentColor 상속. */
.nt-ic{display:inline-block;vertical-align:middle;flex:none;
  fill:none;stroke:currentColor;color:inherit;}
:root[data-theme="dark"]{
  --nt-bg:#1E1710;
  --nt-surface:#2A2018;
  --nt-ink:#EDE2CF;
  --nt-ink-strong:#F4E3B2;
  --nt-muted:#B3A48F;        /* 0930 셸v2: 다크 보조 글자 7.28:1(#1E1710)·6.54:1(#2A2018) */
  --nt-line:#3A2E22;
  --nt-accent:#D8B84A;
  --nt-accent-text:#D8B84A;  /* 0930 셸v2: 다크는 골드 그대로 9.18:1 */
  --nt-on-accent:#2A2018;
  --nt-on-ink:#2A2018;       /* 0930 셸v2: 다크에서 --nt-ink-strong 은 크림 — 그 위 글자는 짙은색(옛 값 유지) */
  --nt-track:#241C14;
  --nt-track-alt:#2E241A;
  --nt-chat-bg:var(--nt-bg);
  --nt-bubble-me:#4A3A20;
  --nt-bubble-me-ink:#F4E3B2;
  --nt-bubble-peer:#2A2018;
  --nt-bubble-peer-ink:#EDE2CF;
}
*{box-sizing:border-box;}
html,body{height:100%;margin:0;background:var(--nt-bg);color:var(--nt-ink);
  font-family:var(--nt-font);font-size:var(--nt-font-size);
  line-height:var(--nt-lh-body);   /* 0930 셸v2: 행간 미지정 요소만 1.5 — 정본이 지정한 곳은 상속 아닌 자기 값이 이긴다 */
  -webkit-font-smoothing:antialiased;}
button{font-family:inherit;cursor:pointer;}
input{font-family:inherit;}

/* 앱 셸 레이아웃 — 뷰포트 고정 높이(대화가 길어도 입력바/칩이 탭바 위 고정).
   dvh 폴백 역순 주의: vh 먼저 → dvh 로 덮어씀. */
#nt-app{height:100vh;height:100dvh;display:flex;flex-direction:column;overflow:hidden;}
.nt-view{flex:1;min-height:0;display:flex;flex-direction:column;
  padding-bottom:calc(var(--nt-h-tabbar) + var(--nt-safe-bottom));}
/* 0930 셸 v2: 목록·스크롤형 화면은 마지막 항목이 탭바에 붙지 않게 하단 패딩 = 탭바 60px + safe-area + 16px.
   하단 독(집사 캐릭터 트레이·입력줄)을 가진 화면(집사홈·협업·채팅방)은 독 위치가 밀리므로 기존 값 유지(레이아웃 회귀 0 원칙).
   :has() 미지원 엔진에서는 이 줄이 무시될 뿐(기존 값) — 실패해도 안전. */
.nt-view[data-view="wallet"],
.nt-view:has(section.screen[data-screen="chats"]){
  padding-bottom:calc(var(--nt-h-tabbar) + var(--nt-safe-bottom) + 16px);}
/* 0930 셸 v2: 지갑 시안의 스크롤 컨테이너(overflow-y:auto)는 높이가 제약되지 않아 콘텐츠(901px)가 프레임(768px, overflow:hidden)에 잘렸다 —
   마지막 카드가 탭바 뒤로 숨고 스크롤도 안 됐다(실측 겹침 82.3px). 프레임 안 남는 높이로 제약(flex)해 안에서 스크롤되게 한다(시안 마크업 무수정). */
.nt-view[data-view="wallet"] [data-screen-label]{display:flex;flex-direction:column;}
.nt-view[data-view="wallet"] [data-screen-label] > *{flex:none;}
.nt-view[data-view="wallet"] [data-screen-label] > div[style*="overflow-y"]{flex:1 1 0;min-height:0;}
.nt-view[data-view="wallet"] [data-screen-label] > div[style*="overflow-y"] > *{flex:none;}   /* 스크롤 안 카드가 눌려 찌그러지지 않게 */

/* 탭바 */
.nt-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;
  height:calc(var(--nt-h-tabbar) + var(--nt-safe-bottom));
  padding-bottom:var(--nt-safe-bottom);
  display:flex;background:var(--nt-surface);border-top:1px solid var(--nt-line);}
.nt-tab{flex:1;border:none;background:transparent;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:3px;color:var(--nt-muted);
  font-size:11px;font-weight:500;padding:6px 0;}
.nt-tab .nt-tab-ico{font-size:20px;line-height:1;}
.nt-tab[aria-selected="true"]{color:var(--nt-ink-strong);}

/* 상단바 */
.nt-topbar{height:52px;display:flex;align-items:center;gap:10px;padding:0 16px;
  background:var(--nt-surface);border-bottom:1px solid var(--nt-line);
  font-size:17px;font-weight:600;color:var(--nt-ink-strong);flex:none;}

/* 집사홈 */
.nt-conv{flex:1;min-height:0;overflow-y:auto;padding:16px;background:var(--nt-chat-bg);
  display:flex;flex-direction:column;gap:12px;}
.nt-conv-empty{margin:auto;text-align:center;color:var(--nt-muted);
  display:flex;flex-direction:column;align-items:center;gap:14px;}
.nt-conv-empty .nt-butler-ico{width:72px;height:72px;border-radius:22px;
  background:var(--nt-ink-strong);color:var(--nt-on-ink);
  display:flex;align-items:center;justify-content:center;font-size:36px;}
.nt-composer{flex:none;display:flex;gap:8px;padding:10px 12px;
  background:var(--nt-surface);border-top:1px solid var(--nt-line);}
.nt-composer input{flex:1;height:44px;border:1px solid var(--nt-line);
  border-radius:22px;padding:0 16px;background:var(--nt-bg);color:var(--nt-ink);font-size:15px;}
.nt-composer button{width:44px;height:44px;border-radius:22px;border:none;
  background:var(--nt-ink-strong);color:var(--nt-on-ink);font-size:18px;}

.nt-conv-empty .nt-hint{font-size:12px;color:var(--nt-muted);opacity:.85;}

/* 집사 대화 — 말풍선 */
.nt-bubble{max-width:78%;padding:10px 14px;border-radius:16px;font-size:14px;line-height:1.45;
  word-break:break-word;white-space:pre-wrap;}
.nt-b-user{align-self:flex-end;background:var(--nt-ink-strong);color:var(--nt-on-ink);
  border-bottom-right-radius:6px;}
.nt-b-butler{align-self:flex-start;background:var(--nt-surface);color:var(--nt-ink);
  border:1px solid var(--nt-line);border-bottom-left-radius:6px;}

/* 집사 카드 */
.nt-card{align-self:flex-start;max-width:88%;background:var(--nt-surface);
  border:1px solid var(--nt-line);border-radius:var(--nt-r-16);overflow:hidden;
  box-shadow:0 1px 3px rgba(58,42,28,.06);}
.nt-card-title{padding:11px 14px;font-size:14px;font-weight:600;color:var(--nt-ink-strong);
  background:var(--nt-track-alt);border-bottom:1px solid var(--nt-line);}
.nt-card-rows{padding:4px 0;}
.nt-card-row{display:flex;gap:10px;padding:7px 14px;font-size:13px;align-items:baseline;}
.nt-card-row + .nt-card-row{border-top:1px solid var(--nt-track);}
.nt-card-row .nt-ck{flex:none;min-width:78px;color:var(--nt-muted);font-weight:500;}
.nt-card-row .nt-cv{flex:1;color:var(--nt-ink);word-break:break-word;}
.nt-card-foot{padding:8px 14px;font-size:11px;color:var(--nt-muted);
  border-top:1px solid var(--nt-track);background:var(--nt-track-alt);}
.nt-card-danger,.nt-card-confirm{border-color:var(--nt-danger);}
.nt-card-danger .nt-card-title,.nt-card-confirm .nt-card-title{color:var(--nt-on-ink);
  background:var(--nt-danger);border-bottom-color:var(--nt-danger);}
.nt-confirm-actions{display:flex;gap:8px;padding:10px 14px;border-top:1px solid var(--nt-track);}
.nt-confirm-yes{flex:1;height:40px;border:none;border-radius:var(--nt-r-12);
  background:var(--nt-danger);color:#fff;font-size:14px;font-weight:600;}
.nt-confirm-no{flex:1;height:40px;border:1px solid var(--nt-line);border-radius:var(--nt-r-12);
  background:var(--nt-surface);color:var(--nt-ink);font-size:14px;}
.nt-confirm-done{font-size:12px;color:var(--nt-muted);padding:2px 0;}

/* 명령칩 바 */
.nt-chips{flex:none;display:flex;gap:8px;padding:8px 12px;overflow-x:auto;
  background:var(--nt-surface);border-top:1px solid var(--nt-line);
  -webkit-overflow-scrolling:touch;scrollbar-width:none;}
.nt-chips::-webkit-scrollbar{display:none;}
.nt-chip{flex:none;height:34px;padding:0 15px;border-radius:17px;font-size:13px;font-weight:500;
  border:1px solid var(--nt-line);background:var(--nt-bg);color:var(--nt-ink-strong);white-space:nowrap;}
.nt-chip-danger{border-color:var(--nt-danger);color:var(--nt-danger);}
.nt-chip-special{border-color:var(--nt-accent);color:var(--nt-ink-strong);
  background:var(--nt-track-alt);font-weight:600;}

/* 티어1 집사 — 기어 버튼 */
.nt-topbar .nt-gear{margin-left:auto;width:34px;height:34px;border-radius:17px;border:none;
  background:var(--nt-track);color:var(--nt-ink-strong);font-size:17px;line-height:34px;
  padding:0;cursor:pointer;flex:none;}

/* 작업패널(위임 진행상황) — 접이식 */
.nt-taskpanel{flex:none;background:var(--nt-surface);border-bottom:1px solid var(--nt-line);}
.nt-taskpanel-head{width:100%;display:flex;align-items:center;gap:8px;padding:10px 16px;
  border:none;background:transparent;color:var(--nt-ink-strong);font-size:13px;font-weight:600;cursor:pointer;}
.nt-taskpanel-head .nt-tp-chev{margin-left:auto;color:var(--nt-muted);font-size:12px;}
.nt-taskpanel-body{padding:4px 12px 10px;max-height:38vh;overflow-y:auto;}
.nt-tp-actions{display:flex;gap:8px;margin-bottom:8px;}
.nt-tp-refresh,.nt-tp-new{height:30px;padding:0 12px;border-radius:15px;font-size:12px;font-weight:500;
  border:1px solid var(--nt-line);background:var(--nt-bg);color:var(--nt-ink-strong);cursor:pointer;}
.nt-tp-new{border-color:var(--nt-accent);}
.nt-tp-hint,.nt-tp-err{font-size:12px;color:var(--nt-muted);padding:8px 4px;}
.nt-tp-err{color:var(--nt-danger);}
.nt-task-row{padding:9px 10px;border:1px solid var(--nt-track);border-radius:var(--nt-r-12);
  margin-bottom:6px;background:var(--nt-bg);}
.nt-task-top{display:flex;align-items:center;gap:8px;}
.nt-task-title{flex:1;font-size:13px;color:var(--nt-ink);word-break:break-word;}
.nt-task-meta{font-size:11px;color:var(--nt-muted);margin-top:3px;}
.nt-task-st{flex:none;font-size:11px;font-weight:600;padding:2px 8px;border-radius:9px;
  background:var(--nt-track);color:var(--nt-muted);}
.nt-task-run{background:#E8F0D8;color:#5E7A1E;}
.nt-task-done{background:#E7EFE0;color:#3E7A3E;}

/* 설정 오버레이 */
.nt-overlay{position:fixed;inset:0;z-index:40;background:var(--nt-bg);
  display:flex;flex-direction:column;}
.nt-topbar .nt-back{width:34px;height:34px;border:none;background:transparent;
  color:var(--nt-ink-strong);font-size:26px;line-height:1;padding:0;cursor:pointer;flex:none;}
.nt-settings{flex:1;min-height:0;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px;}
.nt-set-field{display:flex;flex-direction:column;gap:6px;}
.nt-set-field label{font-size:13px;font-weight:600;color:var(--nt-ink-strong);}
.nt-set-field input{height:44px;border:1px solid var(--nt-line);border-radius:var(--nt-r-12);
  padding:0 14px;font-size:15px;background:var(--nt-surface);color:var(--nt-ink);}
.nt-set-levels{display:flex;flex-direction:column;gap:8px;}
.nt-set-level{text-align:left;display:flex;flex-direction:column;gap:3px;padding:12px 14px;
  border:1px solid var(--nt-line);border-radius:var(--nt-r-12);background:var(--nt-surface);cursor:pointer;}
.nt-set-level.nt-on{border-color:var(--nt-accent);background:var(--nt-track-alt);}
.nt-lv-t{font-size:14px;font-weight:600;color:var(--nt-ink-strong);}
.nt-lv-d{font-size:12px;color:var(--nt-muted);}
.nt-set-note{font-size:12px;color:var(--nt-muted);line-height:1.5;}
.nt-set-save{height:48px;border:none;border-radius:var(--nt-r-12);background:var(--nt-accent);
  color:var(--nt-on-accent);font-size:15px;font-weight:600;cursor:pointer;}
.nt-set-status{font-size:12px;color:var(--nt-muted);text-align:center;min-height:16px;}

/* placeholder 탭 */
.nt-placeholder{margin:auto;text-align:center;color:var(--nt-muted);
  display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px;}
.nt-placeholder .nt-ph-ico{font-size:44px;}

/* 로그인 */
.nt-auth{min-height:100%;display:flex;align-items:center;justify-content:center;
  padding:24px;background:var(--nt-bg);}
.nt-auth form{width:100%;max-width:380px;display:flex;flex-direction:column;gap:22px;}
.nt-auth-brand{display:flex;flex-direction:column;align-items:center;gap:12px;}
.nt-auth-brand .nt-logo{width:64px;height:64px;border-radius:20px;
  background:var(--nt-ink-strong);color:var(--nt-on-ink);
  display:flex;align-items:center;justify-content:center;font-size:32px;}
.nt-auth-brand .nt-title{font-size:23px;font-weight:600;color:var(--nt-ink-strong);}
.nt-auth-brand .nt-sub{font-size:13px;color:var(--nt-muted);}
.nt-field{display:flex;flex-direction:column;gap:7px;}
.nt-field span{font-size:12px;font-weight:500;color:var(--nt-muted);}
.nt-field input{height:52px;background:var(--nt-surface);border:1px solid var(--nt-line);
  border-radius:var(--nt-r-16);padding:0 16px;font-size:15px;color:var(--nt-ink);width:100%;}
.nt-field input:focus{outline:none;border-color:var(--nt-accent);}
.nt-auth-err{font-size:13px;color:var(--nt-on-ink);background:var(--nt-danger);
  border-radius:var(--nt-r-12);padding:10px 14px;}
.nt-submit{height:54px;border-radius:var(--nt-r-16);background:var(--nt-ink-strong);
  color:var(--nt-on-ink);border:none;font-size:15px;font-weight:600;}
.nt-submit:disabled{opacity:.6;}
/* ── 지갑 탭 ── */
.nt-field select{height:52px;background:var(--nt-surface);border:1px solid var(--nt-line);
  border-radius:var(--nt-r-16);padding:0 14px;font-size:15px;color:var(--nt-ink);width:100%;
  -webkit-appearance:none;appearance:none;}
.nt-field select:focus{outline:none;border-color:var(--nt-accent);}
.nt-wal-scroll{flex:1;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:16px;display:flex;flex-direction:column;gap:22px;}
.nt-wal-assets{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.nt-wal-asset{display:flex;align-items:center;gap:11px;background:var(--nt-surface);
  border:1px solid var(--nt-line);border-radius:var(--nt-r-16);padding:14px;position:relative;}
.nt-wal-asset-ico{font-size:22px;}
.nt-wal-asset-body{flex:1;min-width:0;}
.nt-wal-asset-label{font-size:12px;color:var(--nt-muted);}
.nt-wal-asset-bal{font-size:19px;font-weight:700;color:var(--nt-ink-strong);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-wal-asset-tk{position:absolute;top:10px;right:12px;font-size:10px;font-weight:600;
  color:var(--nt-accent-text);letter-spacing:.5px;}
.nt-wal-send{display:flex;flex-direction:column;gap:13px;background:var(--nt-surface);
  border:1px solid var(--nt-line);border-radius:var(--nt-r-20);padding:18px;}
.nt-wal-send-title,.nt-wal-hist-title{font-size:15px;font-weight:700;color:var(--nt-ink-strong);}
.nt-wal-send-err{font-size:13px;color:var(--nt-on-ink);background:var(--nt-danger);
  border-radius:var(--nt-r-12);padding:10px 14px;}
.nt-wal-hist-list{display:flex;flex-direction:column;gap:8px;margin-top:10px;}
.nt-wal-hist-empty{font-size:13px;color:var(--nt-muted);text-align:center;padding:18px 0;}
.nt-wal-tx{display:flex;align-items:center;gap:10px;background:var(--nt-surface);
  border:1px solid var(--nt-line);border-radius:var(--nt-r-12);padding:12px 14px;}
.nt-wal-tx-main{flex:1;min-width:0;}
.nt-wal-tx-peer{font-size:14px;font-weight:600;color:var(--nt-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-wal-tx-memo{font-size:12px;color:var(--nt-muted);margin-top:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-wal-tx-side{text-align:right;flex:none;}
.nt-wal-tx-amt{font-size:14px;font-weight:700;}
.nt-wal-tx.out .nt-wal-tx-amt{color:var(--nt-danger);}
.nt-wal-tx.in .nt-wal-tx-amt{color:var(--nt-accent-text);}
.nt-wal-tx-ts{font-size:11px;color:var(--nt-muted);margin-top:2px;}
.nt-sheet-mask{position:fixed;inset:0;background:rgba(0,0,0,.42);z-index:200;
  display:flex;align-items:flex-end;justify-content:center;}
.nt-sheet{width:100%;max-width:460px;background:var(--nt-surface);
  border-radius:var(--nt-r-20) var(--nt-r-20) 0 0;padding:22px 18px calc(22px + var(--nt-safe-bottom));
  display:flex;flex-direction:column;gap:16px;}
.nt-sheet-title{font-size:17px;font-weight:700;color:var(--nt-ink-strong);}
.nt-sheet-rows{display:flex;flex-direction:column;gap:10px;}
.nt-sheet-row{display:flex;justify-content:space-between;gap:12px;font-size:14px;color:var(--nt-muted);}
.nt-sheet-row b{color:var(--nt-ink-strong);font-weight:600;text-align:right;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-sheet-actions{display:flex;gap:10px;}
.nt-sheet-actions .nt-submit{flex:1;}
.nt-btn-ghost{flex:1;height:54px;border-radius:var(--nt-r-16);background:var(--nt-track);
  color:var(--nt-ink);border:1px solid var(--nt-line);font-size:15px;font-weight:600;}
#nt-splash{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:var(--nt-bg);color:var(--nt-ink-strong);font-size:15px;z-index:100;transition:opacity .2s;}
#nt-splash.hide{opacity:0;pointer-events:none;}

/* ── 채팅(W3, tele-kakao) ── */
.nt-topbar-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-back{flex:none;width:32px;height:32px;margin-left:-6px;border:none;background:transparent;
  color:var(--nt-ink-strong);font-size:26px;line-height:1;cursor:pointer;}
/* 채팅목록 카톡식 행 */
.nt-clist{display:flex;flex-direction:column;}
.nt-clist-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 4px;
  background:transparent;border:none;border-bottom:1px solid var(--nt-line);
  text-align:left;cursor:pointer;color:var(--nt-ink);}
.nt-clist-row:active{background:var(--nt-track-alt);}
.nt-clist-ava{flex:none;width:46px;height:46px;border-radius:15px;
  background:var(--nt-ink-strong);color:var(--nt-on-ink);
  display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:600;}
.nt-clist-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;}
.nt-clist-top{display:flex;align-items:baseline;gap:8px;}
.nt-clist-name{flex:1;min-width:0;font-size:15px;font-weight:600;color:var(--nt-ink-strong);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-clist-time{flex:none;font-size:11px;color:var(--nt-muted);}
.nt-clist-bot{display:flex;align-items:center;gap:8px;}
.nt-clist-prev{flex:1;min-width:0;font-size:13px;color:var(--nt-muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-clist-badge{flex:none;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  background:var(--nt-danger);color:#fff;font-size:11px;font-weight:600;
  display:flex;align-items:center;justify-content:center;}
/* 대화방 메시지 */
.nt-msg{display:flex;flex-direction:column;gap:3px;max-width:100%;}
.nt-msg + .nt-msg{margin-top:8px;}
.nt-msg-mine{align-items:flex-end;}
.nt-msg-peer{align-items:flex-start;}
.nt-msg .nt-bubble{max-width:78%;}
.nt-msg-time{font-size:10px;color:var(--nt-muted);padding:0 4px;}
.nt-msg-receipt{color:var(--nt-accent-text);}

/* tx/file 특수 메시지 카드(D-A2) */
.nt-txcard,.nt-filecard{display:flex;align-items:center;gap:10px;max-width:78%;
  padding:10px 14px;border-radius:16px;border:1px solid var(--nt-line);
  background:var(--nt-track-alt);}
.nt-txcard-ico,.nt-filecard-ico{flex:none;font-size:22px;line-height:1;}
.nt-txcard-body,.nt-filecard-body{display:flex;flex-direction:column;gap:2px;min-width:0;}
.nt-txcard-amt{font-size:15px;font-weight:700;color:var(--nt-ink-strong);}
.nt-txcard-memo{font-size:12px;color:var(--nt-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-txcard-tag{font-size:10px;font-weight:600;color:var(--nt-accent-text);}
.nt-txcard-mine,.nt-filecard-mine{border-color:var(--nt-accent);}
.nt-filecard-name{font-size:14px;font-weight:600;color:var(--nt-ink-strong);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-filecard-size{font-size:11px;color:var(--nt-muted);}

/* 로드 실패 재시도 버튼(D-A5) */
.nt-retry{margin-top:12px;padding:8px 18px;border:1px solid var(--nt-line);
  border-radius:12px;background:var(--nt-track-alt);color:var(--nt-ink-strong);
  font-size:13px;font-weight:600;cursor:pointer;}

/* 로그아웃 버튼(D-A4) */
.nt-set-logout{margin-top:14px;width:100%;padding:12px;border:1px solid var(--nt-line);
  border-radius:var(--nt-r-16,14px);background:transparent;color:var(--nt-danger,#c0392b);
  font-size:14px;font-weight:600;cursor:pointer;}

/* ── 협업(W4, 다자 + 집사 상주) ── */
.nt-topbar-add{margin-left:auto;flex:none;width:32px;height:32px;border:none;
  background:transparent;color:var(--nt-ink-strong);font-size:24px;line-height:1;cursor:pointer;}
.nt-topbar-badge{margin-left:auto;flex:none;font-size:11px;font-weight:600;color:var(--nt-accent-text);
  border:1px solid var(--nt-line);border-radius:12px;padding:3px 9px;background:var(--nt-track-alt);}
.nt-clist-ava-group{background:var(--nt-accent);color:var(--nt-on-accent);}
.nt-clist-count{flex:none;font-size:11px;color:var(--nt-muted);}
/* 다자 메시지 발신자 라벨 */
.nt-msg-sender{font-size:11px;font-weight:600;color:var(--nt-muted);padding:0 4px 2px;}
.nt-msg-peer .nt-bubble{max-width:78%;}
.nt-b-agent{border-color:var(--nt-accent);}
/* 협업방 생성 시트 — 친구 다중선택 */
.nt-collab-friends{max-height:220px;overflow-y:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--nt-line);border-radius:var(--nt-r-16);background:var(--nt-bg);padding:4px 12px;}
.nt-collab-friend{display:flex;align-items:center;gap:11px;padding:9px 2px;cursor:pointer;}
.nt-collab-friend + .nt-collab-friend{border-top:1px solid var(--nt-line);}
.nt-collab-friend-ava{flex:none;width:34px;height:34px;border-radius:11px;
  background:var(--nt-ink-strong);color:var(--nt-on-ink);
  display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;}
.nt-collab-friend-name{flex:1;min-width:0;font-size:14px;color:var(--nt-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nt-collab-friend-ck,.nt-collab-butler-opt input{flex:none;width:20px;height:20px;accent-color:var(--nt-accent);}
.nt-collab-butler-opt{display:flex;align-items:center;gap:11px;padding:12px 14px;
  border:1px solid var(--nt-line);border-radius:var(--nt-r-16);background:var(--nt-track-alt);}
.nt-collab-butler-ico{font-size:22px;flex:none;}
.nt-collab-butler-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;
  font-size:14px;color:var(--nt-ink-strong);}
.nt-collab-butler-txt .nt-hint{font-size:11px;font-weight:400;color:var(--nt-muted);}

/* ── 시안 프레임 내부에 삽입되는 앱표준 컴포넌트의 팔레트/레이아웃 정합 ──
 * 시안(집사홈·지갑·채팅·협업 screens/*.html)은 라이트 팔레트를 하드코딩한다.
 * :root[data-theme="dark"] 에서는 .nt-card/.nt-bubble 이 다크로 떠 시안 위에 검은 상자로 얹혔다.
 * → 시안 프레임 내부에서는 시안 변수(--surf/--tx/--bd/--mine)를 쓰도록 스코프 고정(마크업 무수정).
 * 또한 시안 대화 컨테이너가 flex-column 이라 카드가 flex-shrink 되어 행이 잘렸다 → flex:none 고정.
 */
[data-role="butler-screen"] .nt-card,
[data-role="butler-screen"] .nt-b-butler,
[data-role="butler-screen"] .nt-confirm-no{
  background:var(--surf,#FFFFFF);color:var(--tx,#2B2018);
  border:1px solid var(--bd,#E8E0D0);}
[data-role="butler-screen"] .nt-card-title{
  background:var(--track,#F7F2E8);color:var(--tx,#2B2018);
  border-bottom:1px solid var(--bd,#E8E0D0);}
[data-role="butler-screen"] .nt-card-foot{
  background:var(--track,#F7F2E8);color:var(--sub,#8A7B6C);
  border-top:1px solid var(--bd,#E8E0D0);}
[data-role="butler-screen"] .nt-card-row + .nt-card-row{border-top:1px solid var(--bd,#E8E0D0);}
[data-role="butler-screen"] .nt-card-row .nt-ck{color:var(--sub,#8A7B6C);}
[data-role="butler-screen"] .nt-card-row .nt-cv{color:var(--tx,#2B2018);}
[data-role="butler-screen"] .nt-b-user{
  background:var(--mine,#F4E3B2);color:var(--onmine,#2B2018);}
[data-role="butler-conv"]{display:flex;flex-direction:column;}
[data-role="butler-conv"] > *{flex:0 0 auto;}

/* ── (협업방에도 동일 적용) 시안 프레임 내부에 삽입되는 앱표준 컴포넌트의 팔레트/레이아웃 정합 ──
 * 시안(집사홈·지갑·채팅·협업 screens/*.html)은 라이트 팔레트를 하드코딩한다.
 * :root[data-theme="dark"] 에서는 .nt-card/.nt-bubble 이 다크로 떠 시안 위에 검은 상자로 얹혔다.
 * → 시안 프레임 내부에서는 시안 변수(--surf/--tx/--bd/--mine)를 쓰도록 스코프 고정(마크업 무수정).
 * 또한 시안 대화 컨테이너가 flex-column 이라 카드가 flex-shrink 되어 행이 잘렸다 → flex:none 고정.
 */
[data-role="collab-view"] .nt-card,
[data-role="collab-view"] .nt-b-butler,
[data-role="collab-view"] .nt-confirm-no{
  background:var(--surf,#FFFFFF);color:var(--tx,#2B2018);
  border:1px solid var(--bd,#E8E0D0);}
[data-role="collab-view"] .nt-card-title{
  background:var(--track,#F7F2E8);color:var(--tx,#2B2018);
  border-bottom:1px solid var(--bd,#E8E0D0);}
[data-role="collab-view"] .nt-card-foot{
  background:var(--track,#F7F2E8);color:var(--sub,#8A7B6C);
  border-top:1px solid var(--bd,#E8E0D0);}
[data-role="collab-view"] .nt-card-row + .nt-card-row{border-top:1px solid var(--bd,#E8E0D0);}
[data-role="collab-view"] .nt-card-row .nt-ck{color:var(--sub,#8A7B6C);}
[data-role="collab-view"] .nt-card-row .nt-cv{color:var(--tx,#2B2018);}
[data-role="collab-view"] .nt-b-user{
  background:var(--mine,#F4E3B2);color:var(--onmine,#2B2018);}
[data-role="collab-msgs"]{display:flex;flex-direction:column;}
[data-role="collab-msgs"] > *{flex:0 0 auto;}

/* ★D-friend-ck: .nt-field input{width:100%;height:52px} 가 친구 체크박스까지 먹어(특이도 우위)
 * 체크박스가 행을 다 차지하고 이름 span(flex:1,min-width:0)이 0px 로 눌려 사라졌다.
 * 시트 안 체크박스는 원래 크기로 되돌린다. */
.nt-field .nt-collab-friend-ck,
.nt-collab-butler-opt input[type="checkbox"]{
  width:20px;height:20px;flex:none;padding:0;border-radius:4px;
  background:none;accent-color:var(--nt-accent);}
.nt-field .nt-collab-friend-name{flex:1;min-width:0;font-size:14px;color:var(--nt-ink);font-weight:400;}

/* ══ W5: 화면 폭 체계 통일 (셸 컨테이너 레벨 — 화면별 JS 무수정) ═══════════════
 * 증상: 집사홈·지갑·설정은 시안 프레임(width:390px 인라인)이 좌측에 붙고,
 *   협업·채팅은 JS 프레임채움으로 1244px 전폭 — 같은 앱에서 탭마다 다른 체계.
 * 처방: (1) 셸 컬럼 하나를 중앙 정렬(모바일 전폭 / 데스크톱 최대 --nt-shell-max),
 *       (2) 시안 프레임(.nt-view[data-role] > div)은 CSS로 컬럼을 채우게 고정
 *           → JS의 프레임채움 유무와 무관하게 전 탭 동일(경합 없음: 같은 값).
 *       (3) position:fixed 요소(탭바·오버레이·시트)도 같은 컬럼에 중앙 정렬.
 * 시안 존중: 폭/배치만 통일, 색·타이포·컴포넌트 재디자인 없음. */
:root{
  --nt-shell-max:480px;      /* 시안 390px 기준 + 데스크톱 여유 */
  --nt-page:#EFE7D6;         /* 컬럼 바깥 지면(라이트) */
  --nt-page-line:#E0D3B8;
}
:root[data-theme="dark"]{
  --nt-page:#161009;
  --nt-page-line:#332818;
}
/* 지면(컬럼 바깥) — 데스크톱에서 우측 공백이 '빈 흰판'으로 보이지 않게 */
body{background:var(--nt-page);}

/* 셸 컬럼: 로그인(#nt-root 직속 뷰) 포함 모든 화면 동일 규칙 */
#nt-app,
#nt-root > .nt-view[data-view="login"]{
  width:100%;max-width:var(--nt-shell-max);margin-left:auto;margin-right:auto;
  background:var(--nt-bg);
}
#nt-root > .nt-view[data-view="login"]{height:100vh;height:100dvh;overflow:hidden;
  padding-bottom:0;}
@media (min-width:481px){
  #nt-app,
  #nt-root > .nt-view[data-view="login"]{
    border-left:1px solid var(--nt-page-line);
    border-right:1px solid var(--nt-page-line);
  }
}
/* 시안 프레임(인라인 390x844·라운드·그림자)을 컬럼에 맞춤 — 마크업 무수정 */
/* (시안 프레임 = 인라인 style 에 390x844 를 박아둔 div. <helmet> 등 래퍼 안에 들어있는
 *  화면이 있어 자식 셀렉터로는 못 닿는다 → 인라인 style 속성으로 찾는다.
 *  인라인 style 이 상대라 !important 필수. JS 프레임채움이 style 을 100% 로 바꾸면
 *  이 셀렉터는 자연히 빠지고 결과값(100%)은 동일 — 경합 없음.) */
.nt-view[data-role] div[style*="390px"],
.nt-view[data-role] div[style*="844px"]{
  width:100%!important;max-width:100%!important;
  height:100%!important;max-height:100%!important;
  border-radius:0!important;box-shadow:none!important;
}
/* 로그인 시안은 세로 중앙(폼 높이가 화면보다 작음) */
.nt-view[data-view="login"] div[style*="844px"]{margin:0 auto;}

/* fixed 요소도 같은 컬럼 폭으로 중앙 정렬 (모바일에서는 전폭과 동일) */
.nt-tabbar{left:50%;right:auto;transform:translateX(-50%);
  width:100%;max-width:var(--nt-shell-max);}
.nt-overlay{left:50%;right:auto;top:0;bottom:0;transform:translateX(-50%);
  width:100%;max-width:var(--nt-shell-max);}
.nt-sheet-mask{left:50%;right:auto;top:0;bottom:0;transform:translateX(-50%);
  width:100%;max-width:var(--nt-shell-max);}
.nt-sheet{max-width:100%;}

/* ══════════════════════════════════════════════════════════════
 * W1 로그인 스코프 수리 (적대0820 #3 · #6) — 마크업 무수정, 스타일 값만.
 *  #3 "집사 배정받기"가 시안 844px 기준이라 실뷰포트(≈735px) 밖(y=807)에 있었다.
 *     ① 로그인 뷰를 세로 스크롤 가능하게(도달 보장) ② 시안 프레임 height 고정·
 *     overflow:hidden 해제 ③ 상단 여백(58/34/34/30px)만 압축해 기본 뷰포트 안에
 *     들어오게 한다. 요소·클래스·구조는 그대로.
 *  #6 로그인 시트(비번찾기·가입)가 하단 잘림 — 시트에 최대높이+내부 스크롤.
 *     (가로 위치는 위 셸 컬럼 규칙 .nt-sheet-mask 가 이미 컬럼에 맞춘다)
 * ══════════════════════════════════════════════════════════════ */
/* #3 ① 뷰 자체를 스크롤 컨테이너로 */
#nt-root > .nt-view[data-view="login"]{overflow-y:auto!important;-webkit-overflow-scrolling:touch;}
/* #3 ② 시안 프레임: 고정 높이/클리핑 해제 (내용만큼 자라고, 화면보다 작으면 꽉 채움) */
.nt-view[data-view="login"] > div:not([class]){
  height:auto!important;max-height:none!important;min-height:100%;overflow:visible!important;}
/* #3 ③ 여백 압축 — 시안 844 → 실뷰포트(735) 수용. 자식 순서는 시안 그대로:
   (1)아바타+말풍선 (2)타이틀 (3)폼 (4)스페이서 (5)가입 유도 */
.nt-view[data-view="login"] > div:not([class]) > div > div:nth-of-type(1){
  padding-top:14px!important;gap:10px!important;}
.nt-view[data-view="login"] > div:not([class]) > div > div:nth-of-type(2){padding-top:14px!important;}
.nt-view[data-view="login"] > div:not([class]) > div > div:nth-of-type(3){padding-top:16px!important;}
.nt-view[data-view="login"] > div:not([class]) > div > div:nth-of-type(5){
  padding-top:14px!important;padding-bottom:12px!important;}
/* #6 로그인 시트 하단 잘림 방지 — 시트 내부만 스크롤(배경 마스크는 그대로) */
.nt-sheet-mask[data-role="login-sheet"] > .nt-sheet{
  max-height:86vh;max-height:86dvh;overflow-y:auto;-webkit-overflow-scrolling:touch;}

/* ════════════════════════════════════════════════════════════════════
   ★0909 iOS 홈화면(standalone) 실사용 결함 4건 근본수리 — 사장님 실기 보고
   ① "기본 화면보다 큰 상태로 떠서 축소해야 함"  = 시안 아트보드 프레임이 width:390px/height:844px
      인라인 고정. 실기 뷰포트(390 미만·844 초과 모두)에서 넘치거나 남는다 → 셸 컬럼 100%로 승격.
   ② "집사에게 명령하기 입력칸 절반만 나옴"      = 입력바 bottom 이 탭바 높이(60px)만 반영하고
      safe-area(홈바 34px)를 빼먹어 탭바 뒤로 잠김 → JS 쪽에서 safe 포함 계산(butler.js).
   ③ "하단메뉴가 높게 나와 하단 여백"            = ①의 844px 고정 프레임이 만든 잔여 공간.
   ④ "글씨 쓰려고 하면 화면 엄청 커짐"           = iOS 는 폰트 16px 미만 입력에 포커스하면 자동 확대.
   ⑤ "화면 끌어내리면 화면속 프레임이 끌려 이상"  = 문서 스크롤 러버밴딩 → overscroll 차단.
   시안 마크업(screens/*.html)은 무수정 — 여기서 런타임 오버라이드만 한다(이식노트 기록).
   ════════════════════════════════════════════════════════════════════ */
html,body{height:100%;overscroll-behavior:none;}
body{position:fixed;left:0;right:0;top:0;bottom:0;overflow:hidden;
  -webkit-text-size-adjust:100%;text-size-adjust:100%;}

/* ① ③ 시안 아트보드 프레임(390×844 고정) → 셸 컬럼 채우기 */
#nt-root [data-screen-label]{width:100%!important;max-width:100%!important;height:100%!important;}
/* 시안 프레임 내부 스크롤 영역만 스크롤(문서는 고정) */
#nt-root [data-screen-label]{overscroll-behavior:contain;}

/* ④ iOS 입력 포커스 자동확대 차단 — 편집 가능한 요소는 16px 이상 강제 */
#nt-root input,#nt-root textarea,#nt-root select,
#nt-root [contenteditable="true"],#nt-root [data-role$="-input"]{
  font-size:16px!important;}

/* ⑥ 기본 화면 10px 위로(사장님 0909: "여백이 좀 있음") — 토큰으로 조절 가능하게.
      시안 프레임 최상단은 상태바 여백이라 위로 당겨도 콘텐츠가 잘리지 않는다. */
:root{--nt-shell-lift:10px;}
#nt-root [data-screen-label]{
  margin-top:calc(-1 * var(--nt-shell-lift));
  height:calc(100% + var(--nt-shell-lift))!important;}

/* ★물빛 화면은 위로 당기지 않는다 — 이 화면들의 최상단은 상태바 여백이 아니라 **앱바**다.
   10px 당기면 앱바가 y=-10 으로 올라가 삼선(메뉴) 아이콘 윗줄이 화면 밖으로 잘린다
   (0925 사장님 "선 하나 가려짐" 실측: header.top y=-10, button.ib y=-8). */
#nt-root section.screen[data-screen]{
  margin-top:0!important;
  height:100%!important;}

/* ════════════════════════════════════════════════════════════════════
   ★0909 지갑 "선물하기" 세로줌·가려짐 실기 결함 근본수리 (사장님 실기 보고)
   실측(제어서버 :9847 eval, #nt-app 390px 강제로 실기 뷰포트 재현):
     wal-event-to(친구 아이디 입력, flex:1 → flex-basis:0%) + wal-event-btn
     (선물하기, flex 미지정 → flex-basis:auto) 이 같은 display:flex 행 안에
     있는데, 좁은 폭에서 shrink 분배가 flex-basis 비례라 basis=0인 입력은
     0의 축소분담을 받고(축소 몫이 통째로 btn에 쏠림) btn 이 자기 텍스트
     min-content(선물하기 4글자)보다 더 좁게 눌린다 → white-space 기본값
     normal 이라 텍스트가 줄바꿈(scrollHeight 52 > clientHeight 41)해
     버튼 알 밖으로 "세로로" 넘쳐 카드 padding에 가려진다(실측 결과: 43px
     폭에서 4줄로 줌·10px 카드 밖 침범 → CSS 오버라이드 후 77px·1줄 정상).
   처방: btn 은 flex-shrink 금지(자기 콘텐츠 폭 유지) + 줄바꿈 금지, 대신
   input 이 남는 폭을 전부 흡수(min-width:0 허용) — 시안 마크업 무수정,
   런타임 CSS만. 이식노트 기록: nt/이식노트.md. */
[data-role="wal-event-btn"]{flex:0 0 auto!important; white-space:nowrap!important;}
[data-role="wal-event-to"]{min-width:0!important;}

/* ⑦ ★0909 다크 잔존 근본: 시안 프레임 안 앱 카드/말풍선 규칙이 정의되지 않은 레거시 변수
      (--surf/--tx/--bd/--track/--sub/--mine)를 쓰고 라이트 hex 를 폴백으로 달아둬서, 다크에서도
      대화 카드·말풍선이 크림색으로 남았다(사장님 "일부만 다크"·"입력창 주위"). 레거시 변수를
      크라우니 토큰으로 정의해 한 곳에서 테마를 따라가게 한다(규칙 본문은 무수정 — 최소변경). */
:root{
  --surf:var(--nt-surface);
  --tx:var(--nt-ink);
  --bd:var(--nt-line);
  --track:var(--nt-track);
  --sub:var(--nt-muted);
  --mine:var(--nt-bubble-me);
  --onmine:var(--nt-bubble-me-ink);
}

/* ── 0917 장식 레이어 탭 가로채기 수리 ──────────────────────────────────
 *  사장님 실사용 지적: "텍스트는 뜨는데 버튼들이 안 눌림".
 *  실측: 위임한 작업 카드의 장식용 원(position:absolute · 140x140 · opacity:0.2 · 내용 없음)이
 *  '전체 보기' 위에 얹혀 탭을 그대로 먹고 있었다(elementFromPoint 로 확인).
 *  내용이 없는 장식 레이어는 입력을 받을 이유가 없다 — 클릭을 통과시킨다.
 *  ※ :empty 는 자식·텍스트가 모두 없는 요소만 고른다. 아이콘 버튼은 svg 자식을 가지므로 해당 없음. */
#nt-root div:empty {
  pointer-events: none;
}

/* ── 0918 --danger 토큰 정의 ──────────────────────────────────────────────
 *  login.js 가 3곳에서 var(--danger) 를 쓰는데 이 토큰이 어디에도 정의된 적이 없었다.
 *  그래서 오류 문구 색이 항상 폴백(#C0392B) 고정 — 테마(특히 다크)와 따로 놀았다.
 *  크라우니 4상 색 중 '타'(문제)에 맞춘다. 다크에서도 읽히도록 같이 정의. */
:root { --danger: var(--nt-ta, #B4503C); }

/* ── 0930 채팅 수리: 긴 문자열 넘침 + 파일 카드 최소 표현 ─────────────────────
 *  1) 물빛.css 는 word-break:keep-all 이라 공백 없는 긴 문자열(파일명·해시·URL)이 말풍선을 가로로 넘쳤다
 *     (실화면 E1790752783059 말풍선 넘침=1). 넘칠 때만 끊는다(overflow-wrap:anywhere — 평소 줄바꿈은 그대로).
 *  2) 파일 카드 — 시안에 파일/첨부 요소가 없어 기존 말풍선(.bub) 안에 아이콘+이름+크기 로 최소 표현한다.
 *     색은 말풍선이 정한 글자색을 그대로 물려받는다(currentColor·opacity 만) — 새 색·치수 창작 없음.
 *     ★정식 파일 카드 디자인은 클로드디자인 발주 필요. */
#nt-root .msg .bub{overflow-wrap:anywhere}
#nt-root .msg .col{max-width:100%}
#nt-root .filecard{display:flex;align-items:center;gap:10px;min-width:0;cursor:pointer;color:inherit}
#nt-root .filecard-ic{flex:0 0 auto}
#nt-root .filecard-tx{display:flex;flex-direction:column;min-width:0}
#nt-root .filecard-nm{font-weight:600;overflow-wrap:anywhere}
#nt-root .filecard-sub{font-size:13px;line-height:18px;opacity:.72}

/* ── 0930 지갑 다크 히어로 카드 글자 대비(E1790757274093) ────────────────────────────
 *  원인: 테마치환이 시안 카드 배경 #4A2C1A 을 --nt-ink-strong 으로 바꾸는데 다크에서 이 토큰은 크림(#F4E3B2)이다.
 *        카드 배경만 크림으로 뒤집히고 글자(rgba 흰색 · 골드 위 잉크 · 크림 잉크)는 그대로라 대비가 1.18~1.51:1 이었다.
 *  처방: 다크에서 카드를 라이트와 같은 '짙은 갈색 바탕 + 밝은 글자'로 유지 — 바탕 --nt-bubble-me(짙은 갈색),
 *        글자 --nt-ink/--nt-ink-strong, 골드 버튼 위 글자 --nt-on-accent. 토큰만 사용(하드코딩 hex 없음). 라이트 무변경.
 *        인라인 style 이 이미 var() 로 치환돼 있어 !important 필요. [data-role="wal-hero"] 는 wallet.js 배선이 카드에 각인. */
:root[data-theme="dark"] [data-role="wal-hero"]{
  background:var(--nt-bubble-me)!important;color:var(--nt-ink-strong)!important;}
:root[data-theme="dark"] [data-role="wal-hero"] [data-role="wal-total"]{color:var(--nt-ink-strong)!important;}
:root[data-theme="dark"] [data-role="wal-hero"] [data-role="wal-total-label"],
:root[data-theme="dark"] [data-role="wal-hero"] [data-role="wal-total-sub"]{color:var(--nt-ink)!important;}
:root[data-theme="dark"] [data-role="wal-hero"] [data-role="wal-send"]{color:var(--nt-on-accent)!important;}
:root[data-theme="dark"] [data-role="wal-hero"] [data-role="wal-send"] svg{stroke:var(--nt-on-accent)!important;}
:root[data-theme="dark"] [data-role="wal-hero"] [data-role="wal-recv"]{
  color:var(--nt-ink-strong)!important;border-color:var(--nt-muted)!important;}
