/* 글꼴 조각 — tools/font-slices.py 가 쓴다 */
@font-face { font-family: 'MaruBuri'; font-display: swap; src: url(fonts/maruburi-a.woff2?v=20261023013426) format('woff2'); unicode-range: U+20-7E, U+A0-FF, U+2D8, U+E51, U+1D17, U+1D55, U+2010-2027, U+2030-205E, U+20A9, U+2190-21FF, U+223F, U+22B9, U+2312, U+2500, U+25B6, U+25C0, U+25E0-25E1, U+25E6, U+2727, U+3000-303F, U+A4B0-A4B1, U+AC00-AC01, U+AC04, U+AC08, U+AC10-AC16, U+AC19, U+AC1C, U+AC31, U+AC70-AC71, U+AC74, U+AC77-AC78, U+AC80, U+AC83, U+AC8A, U+AC8C, U+ACA0, U+ACA8-ACA9, U+ACAC, U+ACB0, U+ACB9, U+ACBC-ACBD, U+ACC1, U+ACC4, U+ACE0-ACE1, U+ACE7-ACE8, U+ACF1, U+ACF3, U+ACF5, U+ACFC-ACFD, U+AD00, U+AD11, U+AD1C, U+AD50, U+AD6C-AD6D, U+AD70, U+AD74-AD75, U+AD7D, U+AD81-AD82, U+AD88, U+ADC0, U+ADDC, U+ADF8, U+ADFC, U+AE00, U+AE08, U+AE30, U+AE34, U+AE38, U+AE40, U+AE43, U+AE4A, U+AE4C, U+AE50, U+AE54, U+AE61, U+AE65, U+AE68, U+AEBC, U+AECF, U+AED8, U+AF2C-AF2D, U+AF3C, U+AF43, U+AFB8-AFB9, U+AFBC, U+AFC0, U+AFD4, U+AFE8, U+B00C, U+B010, U+B04A, U+B04C, U+B053-B054, U+B05D, U+B07C, U+B098, U+B09C, U+B0A0-B0A1, U+B0A8-B0A9, U+B0AC, U+B0AE-B0AF, U+B0B1, U+B0B4, U+B0B8, U+B0BC, U+B0C4, U+B0C8, U+B0D0, U+B0E5, U+B108-B109, U+B113, U+B118, U+B123-B124, U+B128, U+B137-B138, U+B141, U+B155, U+B158, U+B178-B179, U+B17C, U+B180, U+B18D, U+B192-B194, U+B204, U+B208, U+B20C, U+B220, U+B290, U+B294, U+B298, U+B2A5-B2A6, U+B2C8, U+B2CC, U+B2D0, U+B2D8, U+B2E4-B2E5, U+B2E8, U+B2EB-B2EC, U+B2F4, U+B2F9, U+B2FF-B300, U+B354-B355, U+B358, U+B35C, U+B364, U+B369, U+B36E, U+B370, U+B3C4, U+B3C8, U+B3CB-B3CC, U+B3D9, U+B3FC, U+B410, U+B418, U+B41C, U+B420, U+B450, U+B454, U+B458, U+B460-B461, U+B465, U+B46C, U+B480, U+B4A4, U+B4B7, U+B4DC-B4DD, U+B4E0, U+B4E3-B4E4, U+B4EC, U+B4EF, U+B4F1, U+B514, U+B524, U+B529, U+B530-B531, U+B534, U+B545, U+B54C, U+B550, U+B5A0, U+B5A4, U+B5A8, U+B5B4, U+B5BB, U+B610-B611, U+B69C-B69D, U+B6AB, U+B6F0, U+B6F4, U+B728-B729, U+B72C, U+B73B, U+B744, U+B754, U+B760, U+B77C-B77D, U+B780, U+B784, U+B78C-B78D, U+B791, U+B798, U+B7C9, U+B7EC, U+B7F0, U+B7FC, U+B800-B801, U+B807-B808, U+B80C, U+B824-B825, U+B82C, U+B837-B838, U+B840, U+B85C-B85D, U+B864, U+B86D, U+B8CC, U+B8E8-B8E9, U+B958, U+B974-B975, U+B978, U+B97C, U+B984, U+B987, U+B9AC, U+B9B0, U+B9B4, U+B9BC, U+B9C8-B9C9, U+B9CC, U+B9CE, U+B9D0-B9D1, U+B9D9, U+B9DB, U+B9DD-B9DE, U+B9E1, U+B9E4, U+B9E8, U+B9F5, U+BA38-BA39, U+BA3C, U+BA40, U+BA48, U+BA4B, U+BA54, U+BA5C, U+BA70, U+BA74, U+BA85, U+BA87, U+BAA8-BAA9, U+BAB0, U+BAB8, U+BABB, U+BB34, U+BB38, U+BB3B-BB3C, U+BB47, U+BB50, U+BB54, U+BBC0, U+BBF8, U+BBFC, U+BC00, U+BC08, U+BC11, U+BC14-BC16, U+BC18, U+BC1B-BC1D, U+BC1F, U+BC24-BC25, U+BC29, U+BC2D, U+BC30, U+BC84-BC85, U+BC88, U+BC8C, U+BC95, U+BC9A, U+BCA0, U+BCA4, U+BCA8, U+BCB4, U+BCBD, U+BCC0, U+BCC4, U+BCD5, U+BCF4-BCF5, U+BCF8, U+BCFC, U+BD04, U+BD09, U+BD10, U+BD24, U+BD80, U+BD84, U+BD88-BD89, U+BD90, U+BD93, U+BD95, U+BD99, U+BDF0, U+BE0C, U+BE44, U+BE48, U+BE57, U+BE59, U+BE5B, U+BE60, U+BE68, U+BE75, U+BE7C, U+BE80, U+BE90, U+BED0, U+BED7, U+BFC5, U+BFCC, U+BFD0, U+C058, U+C05C, U+C068, U+C0AC-C0AD, U+C0B0, U+C0B4, U+C0C0-C0C1, U+C0C8-C0C9, U+C0D0, U+C0DD, U+C11C-C11E, U+C120, U+C124, U+C12F, U+C131, U+C138, U+C149, U+C14B, U+C154, U+C158, U+C168, U+C18C-C18D, U+C190, U+C194, U+C19C, U+C1A1, U+C1E0, U+C218, U+C21C, U+C21F, U+C228, U+C22B, U+C232, U+C26C, U+C270, U+C27C, U+C2A4, U+C2A8, U+C2B5, U+C2DC-C2DD, U+C2E0, U+C2E4, U+C2EC, U+C2F6, U+C2F8-C2F9, U+C30D, U+C313, U+C368, U+C370, U+C3DF, U+C465, U+C4F0, U+C4F4, U+C4F8, U+C528-C529, U+C544-C545, U+C548-C54A, U+C54C, U+C554, U+C557-C558, U+C55E, U+C561, U+C571, U+C57C-C57D, U+C591, U+C597-C598, U+C5B4-C5B5, U+C5B8, U+C5BB-C5BC, U+C5C4-C5C8, U+C5CC, U+C5D0, U+C5D4, U+C5D8, U+C5EC, U+C5F0, U+C5F4, U+C600-C601, U+C605-C606, U+C608, U+C61B, U+C624-C625, U+C628, U+C62C, U+C62E, U+C639, U+C640, U+C644, U+C654, U+C678, U+C67C, U+C694, U+C6A9, U+C6B0, U+C6B4, U+C6B8, U+C6C0, U+C6C3, U+C6C5, U+C6CC, U+C6D0, U+C6E0, U+C6F9, U+C704, U+C717, U+C720, U+C728, U+C73C, U+C740, U+C744, U+C74C, U+C751, U+C758, U+C774-C775, U+C778, U+C77C-C77D, U+C784, U+C787-C789, U+C78E, U+C790-C791, U+C794, U+C798, U+C7A0-C7A1, U+C7A4-C7A5, U+C7AC, U+C7B0, U+C7BF, U+C800-C801, U+C804, U+C808, U+C810-C811, U+C815-C816, U+C81C, U+C838, U+C84C, U+C870, U+C874, U+C878, U+C880, U+C885, U+C88B-C88C, U+C8E0, U+C8FC-C8FD, U+C900, U+C904, U+C90D, U+C911, U+C92C, U+C988, U+C990, U+C998, U+C9C0-C9C1, U+C9C4, U+C9C8, U+C9D0-C9D1, U+C9D3, U+C9D5, U+C9DA, U+C9DC-C9DD, U+C9E7, U+C9F8, U+CABD, U+CB49, U+CBE4, U+CC0C-CC0D, U+CC28-CC29, U+CC2E, U+CC38, U+CC3B-CC3E, U+CC44-CC45, U+CC48, U+CC98, U+CC9C, U+CCA0, U+CCAB, U+CCAD, U+CCB4, U+CCD0, U+CCE4, U+CD08, U+CD5C, U+CD94-CD95, U+CD98, U+CD9C, U+CDA4, U+CDA9, U+CDB0, U+CDC4, U+CDE8, U+CE35, U+CE58-CE59, U+CE5C, U+CE60, U+CE68, U+CE74, U+CE78, U+CE94, U+CEE4-CEE5, U+CEE8, U+CEF7, U+CEF9, U+CF00, U+CF1C, U+CF24, U+CF54, U+CF58, U+CFE0, U+CFF5, U+D034, U+D06C, U+D074, U+D07C, U+D0A4, U+D0A8, U+D0AC, U+D0C0-D0C1, U+D0D1, U+D0D5, U+D0DC-D0DD, U+D130, U+D138, U+D14C-D14D, U+D15C, U+D1A0-D1A1, U+D1B1, U+D1B5, U+D22C, U+D241, U+D280, U+D2B8-D2B9, U+D2BC, U+D2C0, U+D2C8, U+D2F0, U+D30C, U+D310, U+D314, U+D31D, U+D328, U+D37C, U+D3B4, U+D3B8, U+D3BC, U+D3EC-D3ED, U+D3F0, U+D45C, U+D478-D479, U+D47C, U+D480, U+D488, U+D48D, U+D504, U+D50C, U+D514, U+D53C, U+D544, U+D558, U+D55C, U+D560, U+D568, U+D574, U+D587-D589, U+D5A5, U+D5DD, U+D600, U+D604, U+D614-D615, U+D638, U+D63C, U+D654-D655, U+D658, U+D65C, U+D68C, U+D6A8, U+D6C4, U+D734, U+D749, U+D750, U+D754, U+D759, U+D765, U+D76C, U+D770, U+D788, U+D78C, U+D790, U+D798, U+FF01-FF5E; }
@font-face { font-family: 'MaruBuri'; font-display: swap; src: url(fonts/maruburi-b.woff2?v=20261023013426) format('woff2'); unicode-range: U+AC07, U+AC09-AC0A, U+AC17, U+AC1A-AC1B, U+AC1D, U+AC20, U+AC24, U+AC2C-AC2D, U+AC2F-AC30, U+AC38-AC39, U+AC3C, U+AC40, U+AC4B, U+AC4D, U+AC54, U+AC58, U+AC5C, U+AC7A, U+AC81, U+AC84-AC86, U+AC89, U+AC8B, U+AC90, U+AC94, U+AC9C-AC9D, U+AC9F, U+ACA1, U+ACAA, U+ACAF, U+ACB8, U+ACBB, U+ACC8, U+ACCC, U+ACD5, U+ACD7, U+ACE4, U+ACEA, U+ACEC, U+ACEF-ACF0, U+ACF6, U+AD04, U+AD06, U+AD0C-AD0D, U+AD0F, U+AD18, U+AD20, U+AD29, U+AD2C-AD2D, U+AD34-AD35, U+AD38, U+AD3C, U+AD44-AD45, U+AD47, U+AD49, U+AD54, U+AD58, U+AD61, U+AD63, U+AD73, U+AD76, U+AD7B-AD7C, U+AD7F, U+AD89, U+AD8C, U+AD90, U+AD9C-AD9D, U+ADA4, U+ADB7, U+ADC1, U+ADC4, U+ADC8, U+ADD0-ADD1, U+ADD3, U+ADE0, U+ADE4, U+ADF9, U+ADFF, U+AE01, U+AE09, U+AE0B, U+AE0D, U+AE14, U+AE31, U+AE37, U+AE3A, U+AE41, U+AE45-AE46, U+AE4D-AE4E, U+AE56, U+AE5C-AE5D, U+AE5F-AE60, U+AE69, U+AE6C, U+AE70, U+AE78-AE79, U+AE7B-AE7D, U+AE84-AE85, U+AE8C, U+AEBD-AEBE, U+AEC0, U+AEC4, U+AECC-AECD, U+AED0-AED1, U+AED9, U+AEDC, U+AEE8, U+AEEB, U+AEED, U+AEF4, U+AEF8, U+AEFC, U+AF07-AF08, U+AF0D, U+AF10, U+AF30, U+AF32, U+AF34, U+AF3D, U+AF3F, U+AF41-AF42, U+AF48-AF49, U+AF50, U+AF5C-AF5D, U+AF64-AF65, U+AF79, U+AF80, U+AF84, U+AF88, U+AF90-AF91, U+AF95, U+AF9C, U+AFC7-AFC9, U+AFCB, U+AFCD-AFCE, U+AFDC, U+AFE9, U+AFF0-AFF1, U+AFF4, U+AFF8, U+B000-B001, U+B004, U+B014, U+B01C-B01D, U+B028, U+B044-B045, U+B048, U+B04E, U+B055, U+B057, U+B059, U+B07D, U+B080, U+B084, U+B08C-B08D, U+B08F, U+B091, U+B099-B09A, U+B09F, U+B0A2, U+B0AB, U+B0AD, U+B0B3, U+B0B5, U+B0C5, U+B0C7, U+B0C9, U+B0D1, U+B0D4, U+B0D8, U+B0E0, U+B10B-B10C, U+B110, U+B112, U+B119, U+B11B-B11D, U+B125, U+B12C, U+B134-B135, U+B139, U+B140, U+B144, U+B148, U+B150-B151, U+B154, U+B15C, U+B160, U+B182, U+B188-B189, U+B18B, U+B198, U+B19C, U+B1A8, U+B1CC, U+B1D0, U+B1D4, U+B1DC-B1DD, U+B1DF, U+B1E8-B1E9, U+B1EC, U+B1F0, U+B1F9, U+B1FB, U+B1FD, U+B205, U+B20B, U+B214-B215, U+B217, U+B219, U+B234, U+B23C, U+B258, U+B25C, U+B260, U+B268-B269, U+B274-B275, U+B27C, U+B284-B285, U+B289, U+B291, U+B299-B29A, U+B2A0-B2A1, U+B2A3, U+B2AA, U+B2AC, U+B2B0, U+B2B4, U+B2C9, U+B2D2, U+B2D9, U+B2DB, U+B2DD, U+B2E2, U+B2E6, U+B2ED-B2EF, U+B2F3, U+B2F5, U+B2F7-B2F8, U+B2FA-B2FB, U+B301, U+B304, U+B308, U+B310-B311, U+B313-B315, U+B31C, U+B356, U+B35B, U+B35E-B35F, U+B365, U+B367, U+B36B, U+B371, U+B374, U+B378, U+B380-B381, U+B383-B385, U+B38C, U+B390, U+B394, U+B3A0-B3A1, U+B3A8, U+B3AC, U+B3C5, U+B3CE, U+B3D0, U+B3D4-B3D5, U+B3D7, U+B3DB, U+B3DD, U+B3E0, U+B3E4, U+B3E8, U+B428-B429, U+B42B, U+B434, U+B451, U+B463, U+B488, U+B49D, U+B4A8, U+B4AC, U+B4B5, U+B4B9, U+B4C0, U+B4C4, U+B4C8, U+B4D0, U+B4D5, U+B4E6, U+B4ED, U+B4F8, U+B515, U+B518, U+B51B-B51C, U+B525, U+B527-B528, U+B52A, U+B538, U+B540-B541, U+B543-B544, U+B54B, U+B54D, U+B554, U+B55C-B55D, U+B55F-B561, U+B5A1, U+B5AA-B5AB, U+B5B0-B5B1, U+B5B3, U+B5B5, U+B5BC-B5BD, U+B5C0, U+B5C4, U+B5CC-B5CD, U+B5CF-B5D1, U+B5D8, U+B5EC, U+B614, U+B618, U+B625, U+B62C, U+B634, U+B648, U+B664, U+B668, U+B6A0, U+B6A4, U+B6AC, U+B6B1, U+B6D4, U+B6F8, U+B700-B701, U+B705, U+B72F-B730, U+B738-B739, U+B748, U+B74C, U+B755, U+B764, U+B768, U+B770-B771, U+B773, U+B775, U+B78F-B790, U+B792, U+B796-B797, U+B799, U+B79C, U+B7A0, U+B7A8-B7A9, U+B7AB-B7AD, U+B7B4-B7B5, U+B7B8, U+B7C7, U+B7ED, U+B7F4, U+B7FD, U+B7FF, U+B809, U+B810, U+B818-B819, U+B81B, U+B81D, U+B828, U+B834-B835, U+B839, U+B844, U+B851, U+B853, U+B860, U+B86C, U+B86F, U+B871, U+B878, U+B87C, U+B88D, U+B8A8, U+B8B0, U+B8B4, U+B8B8, U+B8C0-B8C1, U+B8C3, U+B8C5, U+B8D0, U+B8D4, U+B8DD, U+B8DF, U+B8E1, U+B8EC, U+B8F0, U+B8F8-B8F9, U+B8FB, U+B8FD, U+B904, U+B918, U+B920, U+B93C-B93D, U+B940, U+B944, U+B94C, U+B94F, U+B951, U+B959, U+B95C, U+B960, U+B968-B969, U+B96B, U+B96D, U+B985, U+B989-B98A, U+B98D-B98E, U+B9AD, U+B9BD, U+B9BF, U+B9C1, U+B9CF, U+B9D2, U+B9D8, U+B9E3, U+B9E5, U+B9EC, U+B9F4, U+B9F7-B9FA, U+BA00-BA01, U+BA08, U+BA15, U+BA42, U+BA49, U+BA4D-BA4E, U+BA53, U+BA55, U+BA58, U+BA64-BA65, U+BA67-BA69, U+BA71, U+BA78, U+BA83-BA84, U+BA8C, U+BAAB-BAAC, U+BAB2, U+BAB9, U+BABD, U+BAC4, U+BAC8, U+BAD8-BAD9, U+BAFC, U+BB00, U+BB04, U+BB0D, U+BB0F, U+BB11, U+BB18, U+BB1C, U+BB20, U+BB29, U+BB2B, U+BB35-BB36, U+BB3D-BB3E, U+BB44-BB45, U+BB49, U+BB4D, U+BB4F, U+BB58, U+BB61, U+BB63, U+BB6C, U+BB88, U+BB8C, U+BB90, U+BBA4, U+BBA8, U+BBAC, U+BBB4, U+BBB7, U+BBC4, U+BBC8, U+BBD0, U+BBD3, U+BBF9, U+BBFF, U+BC02, U+BC09, U+BC0B-BC0D, U+BC0F, U+BC17, U+BC1E, U+BC27, U+BC31, U+BC34, U+BC38, U+BC40-BC41, U+BC43-BC45, U+BC49, U+BC4C-BC4D, U+BC50, U+BC5D, U+BC8B, U+BC8E, U+BC94, U+BC97, U+BC99, U+BCA1, U+BCA7, U+BCB0-BCB1, U+BCB3, U+BCB5, U+BCBC, U+BCCD, U+BCCF-BCD1, U+BCD8, U+BCDC, U+BCF6, U+BD05, U+BD07, U+BD14, U+BD2C, U+BD40, U+BD48-BD49, U+BD4C, U+BD50, U+BD58-BD59, U+BD64, U+BD68, U+BD81, U+BD87, U+BD8A, U+BD91, U+BD9A, U+BD9C, U+BDA4, U+BDB0, U+BDB8, U+BDD4-BDD5, U+BDD8, U+BDDC, U+BDE9, U+BDF4, U+BDF8, U+BE00, U+BE03, U+BE05, U+BE0D, U+BE10, U+BE14, U+BE1C-BE1D, U+BE1F, U+BE45, U+BE4C, U+BE4E, U+BE54-BE55, U+BE5A, U+BE61, U+BE64, U+BE6A, U+BE70-BE71, U+BE73-BE74, U+BE7B, U+BE7D, U+BE84, U+BE8C-BE8D, U+BE8F, U+BE91, U+BE98-BE99, U+BEA8, U+BED1, U+BED4, U+BED8, U+BEE0, U+BEE3-BEE5, U+BEEC, U+BF01, U+BF08-BF09, U+BF18-BF19, U+BF1B-BF1D, U+BF40-BF41, U+BF44, U+BF48, U+BF50-BF51, U+BF55, U+BF94, U+BFB0, U+BFCD, U+BFD4, U+BFDC, U+BFDF, U+BFE1, U+C03C, U+C051, U+C060, U+C069, U+C090-C091, U+C094, U+C098, U+C0A0-C0A1, U+C0A3, U+C0A5, U+C0AF, U+C0B3, U+C0B5-C0B6, U+C0BC-C0BD, U+C0BF, U+C0C5, U+C0CC, U+C0D8-C0D9, U+C0DB-C0DC, U+C0E4-C0E5, U+C0E8, U+C0EC, U+C0F4-C0F5, U+C0F7, U+C0F9, U+C100, U+C104, U+C108, U+C110, U+C115, U+C11F, U+C123, U+C126-C127, U+C12C-C12D, U+C130, U+C136, U+C139, U+C13C, U+C140, U+C148, U+C14C-C14D, U+C155, U+C15C, U+C164-C165, U+C167, U+C169, U+C170, U+C174, U+C178, U+C185, U+C18E, U+C196, U+C19D, U+C19F, U+C1A5, U+C1A8-C1A9, U+C1AC, U+C1B0, U+C1BD, U+C1C4, U+C1C8, U+C1CC, U+C1D4, U+C1D7-C1D8, U+C1E4, U+C1E8, U+C1F0-C1F1, U+C1F3, U+C1FC-C1FD, U+C200, U+C204, U+C20C-C20D, U+C20F, U+C211, U+C219, U+C220, U+C229, U+C22D, U+C22F, U+C231, U+C234, U+C248, U+C250-C251, U+C254, U+C258, U+C260, U+C265, U+C26D, U+C274, U+C27D, U+C27F, U+C281, U+C288-C289, U+C290, U+C298, U+C29B, U+C29D, U+C2A5, U+C2AC-C2AD, U+C2B4, U+C2B7, U+C2B9, U+C2E3, U+C2EB, U+C2ED, U+C2EF, U+C2F1, U+C2FB-C2FC, U+C300, U+C308-C309, U+C30C, U+C314-C315, U+C318, U+C31C, U+C324-C325, U+C328-C329, U+C345, U+C369, U+C36C, U+C372, U+C378-C379, U+C37C-C37D, U+C384, U+C388, U+C38C, U+C3C0, U+C3D8-C3D9, U+C3DC, U+C3E0, U+C3E2, U+C3E8-C3E9, U+C3ED, U+C3F4-C3F5, U+C3F8, U+C408, U+C410, U+C424, U+C42C, U+C430, U+C434, U+C43C-C43D, U+C448, U+C464, U+C468, U+C46C, U+C474-C475, U+C479, U+C480, U+C494, U+C49C, U+C4B8, U+C4BC, U+C4E9, U+C4F1, U+C4FA, U+C4FF-C501, U+C50C, U+C510, U+C514, U+C51C, U+C52C, U+C530, U+C538-C539, U+C53B, U+C53D, U+C54D-C54E, U+C553, U+C555, U+C559, U+C55D, U+C560, U+C564, U+C568, U+C570, U+C573-C575, U+C580, U+C584, U+C587, U+C58C-C58D, U+C58F, U+C595, U+C59C, U+C5A0, U+C5A9, U+C5B9, U+C5BD-C5BE, U+C5C9-C5CA, U+C5CE, U+C5D1, U+C5E0-C5E1, U+C5E3, U+C5E5, U+C5ED-C5EE, U+C5F6-C5F7, U+C5FC-C5FF, U+C607, U+C60C, U+C610, U+C618-C619, U+C61C, U+C62D, U+C630, U+C633-C635, U+C637, U+C63B, U+C641, U+C648, U+C650-C651, U+C653, U+C655, U+C65C-C65D, U+C660, U+C66C, U+C66F, U+C671, U+C679, U+C680, U+C688-C689, U+C68B, U+C68D, U+C695, U+C698, U+C69C, U+C6A4-C6A5, U+C6A7, U+C6B1, U+C6B9-C6BA, U+C6C1, U+C6CD, U+C6D4, U+C6DC-C6DD, U+C6E1, U+C6E8-C6E9, U+C6EC, U+C6F0, U+C6F8, U+C6FD, U+C705, U+C708, U+C70C, U+C714-C715, U+C719, U+C721, U+C724, U+C730-C731, U+C733, U+C735, U+C737, U+C73D, U+C74A, U+C74D, U+C74F, U+C752-C757, U+C75C, U+C760, U+C768, U+C76B, U+C77E, U+C783, U+C785, U+C78A, U+C796-C797, U+C79A, U+C7A3, U+C7A6, U+C7AD, U+C7B4, U+C7BC-C7BD, U+C7C0-C7C1, U+C7C8-C7C9, U+C7CC, U+C7CE, U+C7D0, U+C7D8, U+C7DD, U+C7E4, U+C7E8, U+C7EC, U+C80A, U+C813, U+C81D, U+C820, U+C824, U+C82C-C82D, U+C82F, U+C831, U+C83C, U+C840, U+C848-C849, U+C84D, U+C854, U+C871, U+C87A, U+C881, U+C883, U+C886-C887, U+C88D, U+C894, U+C89D, U+C89F, U+C8A1, U+C8A8, U+C8BC-C8BD, U+C8C4, U+C8C8, U+C8CC, U+C8D4-C8D5, U+C8D7, U+C8D9, U+C8E1, U+C8E4, U+C8F5, U+C905-C906, U+C90C, U+C90F, U+C918, U+C934, U+C950-C951, U+C954, U+C958, U+C960-C961, U+C963, U+C96C, U+C970, U+C974, U+C97C, U+C989, U+C98C, U+C999, U+C99B, U+C99D, U+C9C7, U+C9CA, U+C9D6, U+C9D9, U+C9E0, U+C9E2, U+C9E4, U+C9EC-C9ED, U+C9EF-C9F1, U+C9F9, U+C9FC, U+CA00, U+CA08-CA09, U+CA0B-CA0D, U+CA14, U+CA18, U+CA29, U+CA4C-CA4D, U+CA50, U+CA54, U+CA5C-CA5D, U+CA5F-CA61, U+CA68, U+CA7D, U+CA84, U+CA98, U+CABC, U+CAC0, U+CAC4, U+CACC-CACD, U+CACF, U+CAD1, U+CAD3, U+CAD8-CAD9, U+CAE0, U+CAEC, U+CAF4, U+CB08, U+CB10, U+CB14, U+CB18, U+CB20-CB21, U+CB41, U+CB48, U+CB4C, U+CB50, U+CB58-CB59, U+CB5D, U+CB64, U+CB78-CB79, U+CB9C, U+CBB8, U+CBD4, U+CBE7, U+CBE9, U+CC10, U+CC14, U+CC1C-CC1D, U+CC21-CC22, U+CC27, U+CC2C, U+CC30, U+CC39, U+CC4C, U+CC54-CC55, U+CC57-CC59, U+CC60, U+CC64, U+CC66, U+CC68, U+CC70, U+CC75, U+CC99, U+CCA8-CCA9, U+CCAC, U+CCB5, U+CCB8, U+CCBC, U+CCC4-CCC5, U+CCC7, U+CCC9, U+CCD4, U+CCEC, U+CCF0, U+CD01, U+CD09, U+CD0C, U+CD10, U+CD18-CD19, U+CD1B, U+CD1D, U+CD24, U+CD28, U+CD2C, U+CD39, U+CD60, U+CD64, U+CD6C-CD6D, U+CD6F, U+CD71, U+CD78, U+CD88, U+CDA5, U+CDA7, U+CDCC, U+CDD0, U+CDEC, U+CDF0, U+CDF8-CDF9, U+CDFB, U+CDFD, U+CE04, U+CE08, U+CE0C, U+CE14, U+CE19, U+CE20-CE21, U+CE24, U+CE28, U+CE30-CE31, U+CE33, U+CE5F, U+CE61, U+CE69, U+CE6B, U+CE6D, U+CE75, U+CE7C, U+CE84-CE85, U+CE87, U+CE89, U+CE90-CE91, U+CE98, U+CEA0-CEA1, U+CEA3-CEA5, U+CEAC-CEAD, U+CEC1, U+CEEB-CEEC, U+CEF4-CEF5, U+CEF8, U+CF01, U+CF04, U+CF08, U+CF10-CF11, U+CF13, U+CF15, U+CF20, U+CF2C-CF2D, U+CF2F-CF31, U+CF38, U+CF55, U+CF5C, U+CF64-CF65, U+CF67, U+CF69, U+CF70-CF71, U+CF74, U+CF78, U+CF80, U+CF85, U+CF8C, U+CFA1, U+CFA8, U+CFB0, U+CFC4, U+CFE1, U+CFE4, U+CFE8, U+CFF0-CFF1, U+CFF3, U+CFFC, U+D000, U+D004, U+D011, U+D018, U+D02D, U+D035, U+D038, U+D03C, U+D044-D045, U+D047, U+D049, U+D050, U+D054, U+D058, U+D060, U+D06D, U+D070, U+D07D, U+D081, U+D0A5, U+D0B4-D0B5, U+D0B7, U+D0B9, U+D0C4, U+D0C8-D0C9, U+D0D0, U+D0D3-D0D4, U+D0E0, U+D0E4, U+D0EC-D0ED, U+D0EF-D0F1, U+D0F8, U+D10D, U+D131, U+D134, U+D13A, U+D140-D141, U+D143-D145, U+D150, U+D154, U+D15D, U+D15F, U+D161, U+D168, U+D16C, U+D17C, U+D184, U+D188, U+D1A4, U+D1A8, U+D1B0, U+D1B3, U+D1BA, U+D1BC, U+D1C0, U+D1D8, U+D1F4, U+D1F8, U+D207, U+D209, U+D210, U+D22D, U+D230, U+D234, U+D23C-D23D, U+D23F, U+D248, U+D25C, U+D264, U+D281, U+D284, U+D288, U+D290-D291, U+D295, U+D29C, U+D2A0, U+D2A4, U+D2AC, U+D2B1, U+D2BF, U+D2C2, U+D2C9, U+D2CB, U+D2D4, U+D2D8, U+D2DC, U+D2E4-D2E5, U+D2F1, U+D2F4, U+D2F8, U+D300-D301, U+D303, U+D305, U+D30D-D30E, U+D316, U+D31C, U+D31F-D321, U+D325, U+D329, U+D32C, U+D330, U+D338-D339, U+D33B-D33D, U+D344-D345, U+D37D, U+D380, U+D384, U+D38C-D38D, U+D38F-D391, U+D398-D399, U+D39C, U+D3A0, U+D3A8-D3A9, U+D3AB, U+D3AD, U+D3C4-D3C5, U+D3C8-D3C9, U+D3D0, U+D3D8, U+D3E1, U+D3E3, U+D3F4, U+D3FC-D3FD, U+D3FF, U+D401, U+D408, U+D41D, U+D440, U+D444, U+D460, U+D464, U+D46D, U+D46F, U+D47F, U+D482, U+D489, U+D48B, U+D494, U+D4A9, U+D4CC, U+D4D0, U+D4D4, U+D4DC, U+D4DF, U+D4E8, U+D4EC, U+D4F0, U+D4F8, U+D4FB, U+D4FD, U+D508, U+D515, U+D517, U+D53D, U+D540, U+D54C-D54D, U+D54F, U+D551, U+D559, U+D565, U+D569, U+D56B, U+D56D, U+D575, U+D578, U+D57C, U+D584-D585, U+D590, U+D5C8-D5C9, U+D5CC, U+D5D0, U+D5D2, U+D5D8-D5D9, U+D5DB, U+D5E4-D5E5, U+D5E8, U+D5EC, U+D5F4-D5F5, U+D5F7, U+D5F9, U+D601, U+D608, U+D610-D611, U+D613, U+D61C, U+D620, U+D624, U+D62D, U+D639, U+D640, U+D645, U+D648-D649, U+D64B, U+D64D, U+D651, U+D667, U+D669, U+D670-D671, U+D674, U+D683, U+D685, U+D68D, U+D690, U+D694, U+D69D, U+D69F, U+D6A1, U+D6AC, U+D6B0, U+D6B9, U+D6BB, U+D6C5, U+D6C8, U+D6CC, U+D6D1, U+D6D4, U+D6D7, U+D6D9, U+D6E0, U+D6E4, U+D6E8, U+D6F0, U+D6F5, U+D6FC-D6FD, U+D700, U+D704, U+D711, U+D718-D719, U+D71C, U+D720, U+D728-D729, U+D72B, U+D72D, U+D735, U+D738, U+D73C, U+D744, U+D747, U+D751, U+D756-D758, U+D760-D761, U+D763, U+D769, U+D774, U+D77C-D77D, U+D781, U+D789, U+D799, U+D79B, U+D79D; }
/* 글꼴 조각 끝 */
/* 모루와 친구들 — 화면 틀은 컨셉 시트 배치 그대로.
 * 테두리·버튼·패널은 전부 손그림 PNG. CSS 로 그림자·그라데이션·벡터 아이콘을 그리지 않는다. */
:root {
  --ivory: #F3EBDC; --oat: #DDD0B9; --taupe: #B8A68E; --sage: #A1AB98; --apricot: #E9D4B8; --line: #76634F; --ink: #5b4b3a;
  --st: env(safe-area-inset-top, 0px); --sb: env(safe-area-inset-bottom, 0px); --sl: env(safe-area-inset-left, 0px); --sr: env(safe-area-inset-right, 0px);
  --font: 'MaruBuri', 'Noto Serif KR', 'AppleMyungjo', serif;
}
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body {
  margin: 0; height: 100%; overflow: hidden; background: #8f9a7c; color: var(--ink);
  font-family: var(--font); font-size: 15px; line-height: 1.5; word-break: keep-all; overflow-wrap: anywhere;
  touch-action: none; user-select: none; -webkit-user-select: none; -webkit-touch-callout: none;
  overscroll-behavior: none; text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
}
#game { position: fixed; inset: 0; }
#game canvas { display: block; touch-action: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; touch-action: manipulation; }
img { -webkit-user-drag: none; user-select: none; }
#ui { position: fixed; inset: 0; pointer-events: none; z-index: 10; }
#ui > * { pointer-events: auto; }
body:not(.ready) #ui { visibility: hidden; }

/* 종이 조각들 */
.paper-pill { border-style: solid; border-width: 17px 22px; border-image: url(art/ui/bar-pill.webp?v=20261023013426) 70 76 fill / 17px 22px stretch; }
.sq { position: relative; width: 58px; height: 58px; background: url(art/ui/btn-sq.webp?v=20261023013426) center / 100% 100% no-repeat; display: grid; place-items: center; }
.sq > img { width: 66%; height: 66%; object-fit: contain; }
.sq.on, .sq:active { background-image: url(art/ui/btn-sq-on.webp?v=20261023013426); }
.sq em { position: absolute; top: 100%; left: 50%; transform: translateX(-50%); margin-top: 1px; font-style: normal; font-size: 11.5px; font-weight: 700; white-space: nowrap;
  color: var(--ivory); text-shadow: 0 0 3px rgba(80, 64, 46, .9), 0 0 2px rgba(80, 64, 46, .9); }
.sq.small { width: 44px; height: 44px; }
.dot { position: absolute; top: -3px; right: -3px; width: 13px; height: 13px; border-radius: 50%; background: #d39d7c; border: 2px solid var(--line); display: none; }
.dot.on { display: block; }
.btn { min-height: 44px; padding: 0 16px; border-style: solid; border-width: 14px 18px; border-image: url(art/ui/btn-cream.webp?v=20261023013426) 56 64 fill / 14px 18px stretch;
  display: inline-flex; align-items: center; justify-content: center; gap: 4px; font-size: 15px; font-weight: 700; color: var(--ink); white-space: nowrap; }
.btn > * { margin: -14px 0; }
.btn.green { border-image-source: url(art/ui/btn-green.webp?v=20261023013426); border-image-slice: 60 70 fill; color: #3e4732; }
.btn.off { opacity: .5; }
.btn:active { transform: translateY(1px); }
.btn.arrow img { width: 22px; height: 22px; object-fit: contain; }

/* 위 — 왼쪽 얼굴 + 이름띠, 오른쪽 자원 + 톱니 */
.top { position: fixed; top: calc(var(--st) + 8px); left: calc(var(--sl) + 8px); right: calc(var(--sr) + 8px); display: flex; align-items: center; gap: 4px; }
.top .spacer { flex: 1; }
.badge { position: relative; width: 60px; height: 60px; flex: none; z-index: 2; }
.badge .frame { position: absolute; inset: 0; display: grid; place-items: center; }
.badge .frame-img { position: absolute; inset: 0; width: 100%; height: 100%; }
.badge .face { position: relative; z-index: 1; border-radius: 50%; }
.badge .count { position: absolute; right: -2px; bottom: -2px; min-width: 22px; height: 22px; padding: 0 5px; border-radius: 11px; background: var(--line); color: var(--ivory); font-size: 12px; font-weight: 700; display: grid; place-items: center; border: 2px solid var(--ivory); }
.namebar { margin-left: -16px; padding-left: 10px; min-width: 0; max-width: 170px; }
.vname { font-size: 14.5px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin: -8px 0 -3px; }
.dayrow { display: flex; align-items: center; gap: 6px; font-size: 11.5px; margin-bottom: -8px; white-space: nowrap; }
.daybar { width: 34px; flex: none; height: 7px; border-radius: 4px; background: var(--oat); border: 1.5px solid var(--line); overflow: hidden; }
.daybar i { display: block; height: 100%; background: #d7b46a; }
.res { display: flex; gap: 10px; align-items: center; font-family: var(--font); }
.res .r { display: inline-flex; align-items: center; gap: 3px; margin: -8px 0; }
.res img { width: 22px; height: 22px; object-fit: contain; }
.res b { font-size: 14px; min-width: 18px; font-variant-numeric: tabular-nums; }
@media (max-width: 459px) {
  /* 좁은 폰 — 자원 띠를 둘째 줄 오른쪽으로 */
  .top { flex-wrap: wrap; row-gap: 2px; }
  .top .res { order: 5; margin-left: auto; margin-right: 0; }
  .top .spacer { order: 3; }
  .top #b-set { order: 4; }
}

/* 왼쪽 세로 단추 — 제안·주민·기억 */
.left { position: fixed; left: calc(var(--sl) + 10px); top: calc(var(--st) + 118px); display: flex; flex-direction: column; gap: 24px; }
/* 오른쪽 아래 — 꾸미기·손보기 */
.right { position: fixed; right: calc(var(--sr) + 10px); bottom: calc(var(--sb) + 72px); display: flex; flex-direction: column; gap: 24px; }
.right .sq { width: 64px; height: 64px; }

/* 소식 한 줄 */
.news { position: fixed; left: calc(var(--sl) + 10px); right: calc(var(--sr) + 10px); bottom: calc(var(--sb) + 12px); display: flex; justify-content: center; opacity: 0; transform: translateY(8px); transition: opacity .35s, transform .35s; pointer-events: none !important; }
.news.show { opacity: 1; transform: none; pointer-events: auto !important; }
.news span { display: inline-block; max-width: 100%; box-sizing: border-box; border-style: solid; border-width: 14px 20px; border-image: url(art/ui/bar-pill.webp?v=20261023013426) 70 76 fill / 14px 20px stretch; font-size: 13.5px; line-height: 1.4; padding: 2px 6px; text-align: center; }
.hint { position: fixed; left: 50%; transform: translateX(-50%); bottom: calc(var(--sb) + 64px); font-size: 12.5px; color: var(--ivory); text-shadow: 0 0 3px rgba(70, 56, 40, .95); white-space: nowrap; pointer-events: none !important; }
body.placing .right, body.placing .left, body.placing .news, body.editing .news, body.placing .hint { display: none; }
body.editing .right { display: none; }

/* 아래 띠(놓기·손보기) */
.bar { position: fixed; left: calc(var(--sl) + 6px); right: calc(var(--sr) + 6px); bottom: calc(var(--sb) + 6px); display: none; flex-direction: column; align-items: stretch; gap: 10px; max-width: 560px; margin: 0 auto;
  border-style: solid; border-width: 18px 20px; border-image: url(art/ui/panel.webp?v=20261023013426) 48 fill / 18px 20px stretch; }
.bar.in { display: flex; }
.pinfo { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 10px; min-width: 0; margin: -6px 2px 0; }
.pinfo small { flex-basis: 100%; }
.pinfo b { font-size: 16px; }
.pinfo small { font-size: 12px; opacity: .85; }
.pinfo .costs { display: flex; gap: 8px; font-size: 13px; }
.pbtns { display: flex; gap: 6px; margin: 0 0 -6px; }
.pbtns .btn { flex: 1; min-width: 0; padding: 0 6px; }
body.editing .bar { bottom: calc(var(--sb) + 6px); }
body.editing .right { bottom: calc(var(--sb) + 140px); }
.c { display: inline-flex; align-items: center; gap: 2px; font-weight: 700; }
.c img { width: 17px; height: 17px; object-fit: contain; }

/* 아래에서 올라오는 종이 */
.sheet { position: fixed; left: calc(var(--sl) + 6px); right: calc(var(--sr) + 6px); bottom: calc(var(--sb) + 6px); max-height: calc(64vh - var(--sb)); display: flex; flex-direction: column;
  border-style: solid; border-width: 22px 22px; border-image: url(art/ui/panel.webp?v=20261023013426) 52 fill / 22px 22px stretch;
  transform: translateY(105%); transition: transform .22s ease-out; z-index: 20; max-width: 560px; margin: 0 auto; }
.sheet.tall { max-height: calc(86vh - var(--sb) - var(--st)); }
.sheet.in { transform: none; }
.sheet-head { display: flex; align-items: center; justify-content: space-between; margin: -10px -6px 6px -10px; flex: none; }
.tag { display: inline-block; border-style: solid; border-width: 10px 26px 10px 14px; border-image: url(art/ui/tag.webp?v=20261023013426) 40 70 40 36 fill / 10px 26px 10px 14px stretch; font-size: 15.5px; font-weight: 700; line-height: 1.2; }
.x { width: 40px; height: 40px; display: grid; place-items: center; margin: -6px -8px -6px 0; }
.x img { width: 28px; height: 28px; object-fit: contain; }
.sheet > :last-child { overflow-y: auto; -webkit-overflow-scrolling: touch; touch-action: pan-y; overscroll-behavior: contain; }
.tip { font-size: 12.5px; opacity: .8; margin: 8px 2px 0; }
.empty { text-align: center; margin: 18px 0; line-height: 1.7; }

/* 꾸미기 */
.tabs { display: flex; gap: 4px; margin-bottom: 8px; }
.tab { flex: 1; min-height: 38px; font-size: 14px; font-weight: 700; border-style: solid; border-width: 10px 12px; border-image: url(art/ui/btn-cream.webp?v=20261023013426) 56 64 fill / 10px 12px stretch; }
.tab.on { border-image-source: url(art/ui/btn-green.webp?v=20261023013426); border-image-slice: 60 70 fill; }
.grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.slot { display: flex; flex-direction: column; align-items: center; padding: 10px 6px 9px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; min-height: 116px; }
.slot .pic { width: 100%; height: 50px; display: flex; align-items: flex-end; justify-content: center; overflow: hidden; }
.slot .pic img { width: auto; height: auto; max-width: 64px; max-height: 50px; object-fit: contain; display: block; }
.slot .nm { font-size: 12px; font-weight: 700; margin-top: 4px; line-height: 1.2; text-align: center; word-break: keep-all; }
.slot .cost { font-size: 11.5px; display: flex; gap: 4px; }
.slot .cost img { width: 14px; height: 14px; }
.slot.locked { opacity: .45; }
.slot.poor .cost { opacity: .55; }

/* 제안 편지 */
.plist { display: flex; gap: 6px; overflow-x: auto; margin-bottom: 8px; touch-action: pan-x; }
.pitem { display: flex; align-items: center; gap: 6px; flex: none; padding: 0 6px; min-height: 40px; font-size: 13px; border-style: solid; border-width: 8px 10px; border-image: url(art/ui/btn-cream.webp?v=20261023013426) 56 64 fill / 8px 10px stretch; }
.pitem.on { border-image-source: url(art/ui/btn-sq-on.webp?v=20261023013426); border-image-slice: 60 fill; }
.pitem .face, .lhead .face, .ritem .face, .rrel .face { border-radius: 50%; background-color: var(--apricot); flex: none; }
.letter { padding: 2px 2px 0; }
.lhead { display: flex; align-items: center; gap: 10px; text-align: left; }
.lhead small { display: block; font-size: 12px; opacity: .8; }
.lhead b { font-size: 18px; }
.lpic { display: grid; place-items: center; height: 136px; margin: 4px 0; }
.lpic img { width: auto; height: auto; max-height: 136px; max-width: 80%; object-fit: contain; }
.ltext { font-size: 15px; line-height: 1.6; margin: 4px 0 6px; }
.lmeta { font-size: 13px; margin: 0 0 6px; opacity: .9; }
.lcost { display: flex; gap: 12px; font-size: 14px; margin-bottom: 10px; }
.lbtns { display: flex; gap: 8px; justify-content: flex-end; }

/* 주민 */
.rlist { display: flex; flex-direction: column; gap: 6px; }
.ritem { display: flex; align-items: center; gap: 10px; text-align: left; padding: 6px 4px; min-height: 58px; border-bottom: 1.5px dashed rgba(118, 99, 79, .35); }
.ritem .rt b { display: block; font-size: 15px; }
.ritem .rt small { font-size: 12.5px; opacity: .85; }
.rtop { display: flex; gap: 12px; align-items: center; }
.rfig { width: 92px; height: 92px; flex: none; background: url(art/ui/frame-round.webp?v=20261023013426) center / 100% 100% no-repeat; display: grid; place-items: center; }
.rfig .face { border-radius: 50%; }
.rinfo p { margin: 2px 0; font-size: 14px; }
.rinfo .now { font-weight: 700; font-size: 15px; }
.rinfo .small { font-size: 12.5px; opacity: .85; }
.rtraits { margin: 10px 0 8px; padding: 8px 2px; border-top: 1.5px dashed rgba(118, 99, 79, .45); border-bottom: 1.5px dashed rgba(118, 99, 79, .45); }
.rtraits p { margin: 2px 0; font-size: 13.5px; }
.rrels { display: flex; flex-direction: column; gap: 4px; margin: 6px 0; }
.rrel { display: flex; gap: 8px; align-items: center; font-size: 13.5px; }
.rlog { margin-top: 6px; font-size: 13px; }
.rlog small { font-size: 12px; opacity: .75; }
.rlog p { margin: 1px 0; }

/* 기억 그림책 */
.book { text-align: left; }
.page { padding: 4px 4px 8px; min-height: 280px; }
.pnum { font-size: 12px; opacity: .7; text-align: right; }
.ppic { display: flex; justify-content: center; align-items: flex-end; gap: 4px; height: 110px; margin: 4px 0 8px; background: url(art/obj/tuft.webp?v=20261023013426) center bottom / 120px auto no-repeat; }
.ppic .face { background-color: transparent; }
.pt { font-size: 19px; font-weight: 700; margin: 4px 0; }
.ptext { font-size: 15px; line-height: 1.65; margin: 4px 0 10px; }
.pmeta { font-size: 12.5px; opacity: .8; }
.empty-page { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; line-height: 1.7; }
.pnav { display: flex; justify-content: space-between; margin-top: 8px; }
.mtoast { position: fixed; left: 50%; top: calc(var(--st) + 120px); transform: translate(-50%, -12px); opacity: 0; transition: opacity .35s, transform .35s; display: flex; align-items: center; gap: 8px;
  border-style: solid; border-width: 14px 18px; border-image: url(art/ui/panel.webp?v=20261023013426) 48 fill / 14px 18px stretch; z-index: 30; }
.mtoast.in { opacity: 1; transform: translate(-50%, 0); }
.mtoast img { width: 34px; height: 34px; object-fit: contain; margin: -8px 0; }
.mtoast small { display: block; font-size: 11.5px; opacity: .75; margin-top: -6px; }
.mtoast b { font-size: 15px; display: block; margin-bottom: -6px; }

.newslog p { margin: 4px 0; font-size: 13.5px; border-bottom: 1px dashed rgba(118, 99, 79, .35); padding-bottom: 4px; }
.settings .row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 6px 0; min-height: 44px; }
.settings input { font: inherit; font-size: 15px; color: var(--ink); background: var(--ivory); border: 1.5px solid var(--line); border-radius: 8px; padding: 6px 8px; width: 60%; user-select: text; -webkit-user-select: text; }
.settings .ai { font-size: 12px; opacity: .75; margin-top: 10px; }

.face { display: inline-block; background-repeat: no-repeat; }

/* 시작 화면 */
#title { position: fixed; inset: 0; z-index: 50; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0; background: #efe5d0 url(art/ui/panel.webp?v=20261023013426) center / cover; transition: opacity .6s; padding: calc(var(--st) + 16px) 16px calc(var(--sb) + 16px); }
/* 시작 화면 그림(미드저니) — 서랍장에서 마을이 자라나는 표지 */
.tcover { position: relative; width: min(100%, 420px, calc((100dvh - 230px) * .75)); margin-bottom: -18px; z-index: 0; }
.tart { display: block; width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border: 2px solid rgba(118, 99, 79, .6); border-radius: 6px 8px 7px 5px; box-shadow: 0 8px 22px rgba(80, 60, 40, .25); }
/* 제목은 그림 위쪽 빈 하늘에 */
.ttitle { position: absolute; left: 0; right: 0; top: 7%; margin: 0; text-align: center; font-size: clamp(28px, 9vw, 40px); letter-spacing: -0.5px; color: #5b4632; text-shadow: 0 1px 0 rgba(255, 250, 238, .9), 0 0 12px rgba(255, 248, 232, .9); }
#title .tname { display: none; }
.tart[src=''], .tart.err { display: none; }
#title.out { opacity: 0; }
.tcard { position: relative; z-index: 1; width: min(340px, 100%); text-align: center; padding: 6px 4px; border-style: solid; border-width: 26px; border-image: url(art/ui/panel.webp?v=20261023013426) 52 fill / 26px stretch; }
.tlogo { display: none; }
#title h1 { font-size: 28px; margin: -6px 0 8px; letter-spacing: -0.5px; }
.tsub { font-size: 14.5px; line-height: 1.65; margin: 0 0 14px; }
.tgo { font-size: 16px; font-weight: 700; margin: 0 0 10px; animation: breathe 2.4s ease-in-out infinite; }
.tai { font-size: 11.5px; opacity: .7; margin: 0 0 -10px; }
#title.again .tsub { display: none; }
@keyframes breathe { 50% { opacity: .55; } }

/* 밭·만들기·가방 */
.now { font-weight: 700; margin: 0 2px 8px; }
.tabs .tab { font-size: 13px; }
.editbtn { width: 100%; margin-top: 8px; }
.crops { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.crop { display: grid; grid-template-columns: 40px 1fr; grid-template-rows: auto auto; align-items: center; column-gap: 6px; text-align: left; padding: 8px 10px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; min-height: 64px; }
.crop img { grid-row: 1 / 3; width: 38px; height: 38px; object-fit: contain; }
.crop .nm { font-weight: 700; font-size: 15px; }
.crop .meta { font-size: 11.5px; display: flex; align-items: center; gap: 3px; flex-wrap: wrap; }
.crop .meta .c img { width: 13px; height: 13px; grid-row: auto; }
.crop.on { background-image: url(art/ui/btn-sq-on.webp?v=20261023013426); }
.recipe { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 6px 10px; padding: 10px 4px; border-bottom: 1.5px dashed rgba(118, 99, 79, .35); }
.rhead { grid-column: 1 / 3; display: flex; align-items: center; gap: 8px; }
.rhead .out { width: 46px; height: 46px; border-radius: 50%; background: var(--ivory); border: 1.5px solid var(--line); display: grid; place-items: center; }
.rhead .out img { width: 34px; height: 34px; object-fit: contain; }
.rhead b { font-size: 16px; }
.rhead small { opacity: .75; }
.need { display: flex; gap: 6px; flex-wrap: wrap; }
.need .ing { width: 56px; padding: 6px 0 4px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; display: flex; flex-direction: column; align-items: center; }
.need .ing img { width: 30px; height: 30px; object-fit: contain; }
.need .ing small { font-size: 12px; font-weight: 700; }
.need .ing.short small { color: #a0604a; }
.need .none { font-size: 13px; opacity: .8; }
.bgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.bslot { display: flex; flex-direction: column; align-items: center; padding: 8px 2px 6px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; position: relative; }
.bslot img { width: 38px; height: 38px; object-fit: contain; }
.bslot b { position: absolute; right: 10px; top: 6px; font-size: 13px; }
.bslot small { font-size: 11.5px; }
.bslot.zero { opacity: .45; }
.wants { margin-bottom: 10px; }
.wants > small { font-size: 12px; opacity: .75; }
.want { display: flex; align-items: center; gap: 8px; padding: 4px 0; border-bottom: 1px dashed rgba(118, 99, 79, .3); }
.want span { flex: 1; font-size: 14px; display: flex; align-items: center; gap: 3px; }
.want span img { width: 22px; height: 22px; object-fit: contain; }
.want .btn { min-height: 38px; }
.want .face { border-radius: 50%; background-color: var(--apricot); flex: none; }
.wish { display: flex; align-items: center; gap: 8px; margin: 10px 0 4px; padding: 10px 6px; min-height: 64px; border-top: 1.5px dashed rgba(118, 99, 79, .45); }
.wish .btn, .want .btn, .jobrow .btn { flex: none; }
.wish img { width: 34px; height: 34px; object-fit: contain; }
.wish span { flex: 1; font-size: 14px; }
.wish small { display: block; font-size: 12px; opacity: .7; }
.bslot.on { background-image: url(art/ui/btn-sq-on.webp?v=20261023013426); }
.sellrow { display: flex; align-items: center; gap: 6px; margin-top: 10px; padding-top: 8px; border-top: 1.5px dashed rgba(118, 99, 79, .45); }
.sellrow img { width: 34px; height: 34px; object-fit: contain; }
.sellrow span { flex: 1; min-width: 0; }
.sellrow span b { display: block; font-size: 15px; }
.sellrow span small { font-size: 12px; opacity: .8; }
.sellrow .btn { min-height: 40px; padding: 0 10px; font-size: 14px; }
.jobrow { display: flex; align-items: center; gap: 8px; margin: 10px 0 4px; padding: 10px 6px; min-height: 64px; border-top: 1.5px dashed rgba(118, 99, 79, .45); }
.jobrow span { flex: 1; font-size: 14px; }
.jobrow small { display: block; font-size: 12px; opacity: .7; }
.jobtip { margin-top: 10px; }
.rbtns { display: flex; gap: 6px; }
.keep { padding: 0 10px; font-size: 13px; }
.keep.on { border-image-source: url(art/ui/btn-sq-on.webp?v=20261023013426); border-image-slice: 60 fill; }
.pillust { margin: 6px 0 10px; padding: 6px; background: var(--ivory); border: 1.5px solid rgba(118, 99, 79, .55); border-radius: 4px 6px 5px 3px; }
.pillust img { display: block; width: 100%; height: auto; border-radius: 2px; }
.rescue { position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 99; text-align: center; padding: 6px 10px; border-style: solid; border-width: 22px; border-image: url(art/ui/panel.webp?v=20261023013426) 52 fill / 22px stretch; }
.rescue p { margin: -8px 0 10px; font-weight: 700; }
.rescue .btn { margin: 0 3px; }

/* 집 안 — 방 그림은 9:16 그대로, 위·아래 띠에 이름과 선반 */
.home { position: fixed; inset: 0; z-index: 40; background: #f8f2d8; display: flex; flex-direction: column; opacity: 0; transition: opacity .25s; }
.home.in { opacity: 1; }
.htop { flex: none; display: flex; align-items: center; gap: 6px; padding: calc(var(--st) + 8px) calc(var(--sr) + 8px) 6px calc(var(--sl) + 8px); }
.htop .hsp { flex: 1; }
.htop .btn { min-height: 40px; font-size: 14px; }
.hstage { flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.hroom { position: relative; z-index: 0; isolation: isolate; flex: none; width: min(122%, calc((100dvh - var(--st) - var(--sb) - 250px) * 925 / 780)); aspect-ratio: 925 / 780; }
.hbg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: fill; border-radius: 4px; }
.hglow { position: absolute; width: 46%; aspect-ratio: 1; transform: translate(-50%, -50%); border-radius: 50%; background: radial-gradient(closest-side, rgba(255, 196, 120, .45), rgba(255, 170, 90, .12) 60%, rgba(255, 160, 80, 0)); mix-blend-mode: screen; pointer-events: none; animation: flicker 2.6s infinite; opacity: .55; }
.home.cooking .hglow { opacity: 1; width: 60%; }
@keyframes flicker { 0% { opacity: .55; } 18% { opacity: .7; } 33% { opacity: .5; } 52% { opacity: .75; } 70% { opacity: .58; } 100% { opacity: .55; } }
.home.cooking .hglow { animation-name: flicker2; }
@keyframes flicker2 { 0% { opacity: .85; } 25% { opacity: 1; } 45% { opacity: .8; } 70% { opacity: 1; } 100% { opacity: .85; } }
.hpot { position: absolute; aspect-ratio: 1; z-index: 728; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; }
.hpot.stir { transform: rotate(-4deg); }
.hpot.shake { animation: shake .35s; }
@keyframes shake { 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } }
.hin { display: flex; flex-wrap: wrap; justify-content: center; gap: 2px; min-height: 30px; margin-top: -26px; }
.hin img { width: 30px; height: 30px; object-fit: contain; animation: drop .3s ease-out; }
@keyframes drop { from { transform: translateY(-24px); opacity: 0; } }
.hdish { width: 64px; height: 64px; object-fit: contain; display: none; margin-top: -20px; }
.hdish.on { display: block; animation: rise .5s ease-out; }
@keyframes rise { from { transform: translateY(16px) scale(.7); opacity: 0; } }
.hbar { position: absolute; bottom: -6px; width: 70%; height: 9px; border-radius: 5px; background: var(--ivory); border: 1.5px solid var(--line); overflow: hidden; visibility: hidden; }
.hbar i { display: block; height: 100%; background: #d7a35e; }
.hbar.top { bottom: auto; width: 16%; min-width: 64px; height: 11px; transform: translateX(-50%); z-index: 5000; box-shadow: 0 1px 3px rgba(70, 56, 40, .3); }
.hsteam .puff { position: absolute; width: 13%; pointer-events: none; animation: steam 2.6s ease-out forwards; opacity: 0; }
@keyframes steam { 0% { transform: translateY(0) scale(.6); opacity: 0; } 25% { opacity: .75; } 100% { transform: translateY(-90px) scale(1.3); opacity: 0; } }
.hpeople { position: absolute; inset: 0; pointer-events: none; }
.hfront { position: absolute; pointer-events: none; }
.hwalker { position: absolute; aspect-ratio: 132 / 168; background-repeat: no-repeat; background-size: 1300% 100%; transform-origin: 50% 100%; }
.hbottom { position: relative; z-index: 5; flex: none; padding: 6px calc(var(--sr) + 8px) calc(var(--sb) + 8px) calc(var(--sl) + 8px); border-style: solid; border-width: 16px 16px 0; border-image: url(art/ui/panel.webp?v=20261023013426) 48 48 0 fill / 16px 16px 0 stretch; }
.hhint { margin: -4px 2px 6px; font-size: 13.5px; min-height: 20px; }
.hshelf { display: grid; grid-template-columns: repeat(6, 1fr); gap: 4px; }
.hitem { display: flex; flex-direction: column; align-items: center; padding: 6px 0 4px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; position: relative; }
.hitem img { width: 34px; height: 34px; object-fit: contain; }
.hitem b { position: absolute; right: 6px; top: 3px; font-size: 12px; }
.hitem small { font-size: 11px; }
.hitem.zero { opacity: .45; }
.hbtns { display: flex; gap: 6px; margin-top: 8px; }
.hbtns .btn { flex: 1; }
.hbook { position: absolute; z-index: 20; left: 8px; right: 8px; top: calc(var(--st) + 56px); bottom: calc(var(--sb) + 8px); max-width: 520px; margin: 0 auto; display: flex; flex-direction: column; border-style: solid; border-width: 22px; border-image: url(art/ui/panel.webp?v=20261023013426) 52 fill / 22px stretch; }
.blist { overflow-y: auto; touch-action: pan-y; flex: 1; }
.brow { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1.5px dashed rgba(118, 99, 79, .35); }
.brow .bo { width: 40px; height: 40px; object-fit: contain; }
.brow.unknown .bo { filter: grayscale(1) brightness(.6) opacity(.5); }
.brow .bn { flex: 1; font-weight: 700; font-size: 14.5px; }
.brow .bis { display: flex; align-items: center; gap: 2px; font-size: 12px; }
.bi { display: inline-flex; align-items: center; font-weight: 700; }
.bi img { width: 26px; height: 26px; object-fit: contain; }
.bq { opacity: .7; font-size: 12px; }

/* 처음 안내 그림책 */
.tut { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; padding: calc(var(--st) + 12px) 14px calc(var(--sb) + 12px); background: rgba(70, 58, 44, .35); opacity: 0; transition: opacity .25s; }
.tut.in { opacity: 1; }
.tcard2 { width: min(380px, 100%); border-style: solid; border-width: 22px; border-image: url(art/ui/panel.webp?v=20261023013426) 52 fill / 22px stretch; text-align: center; }
.tpic { margin: -8px -6px 6px; border: 1.5px solid rgba(118, 99, 79, .5); border-radius: 4px 6px 5px 3px; overflow: hidden; background: var(--ivory); }
.tpic img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.tdots { display: flex; justify-content: center; gap: 6px; margin: 6px 0 4px; }
.tdots i { width: 7px; height: 7px; border-radius: 50%; background: var(--oat); border: 1px solid var(--line); }
.tdots i.on { background: var(--line); }
.tcard2 h2 { font-size: 19px; margin: 4px 0 6px; }
.ttext { font-size: 14.5px; line-height: 1.65; margin: 0 2px 12px; text-align: left; min-height: 4.9em; }
.tbtns { display: flex; gap: 8px; margin-bottom: -8px; }
.tbtns .btn { flex: 1; }
/* 낮은 가로 화면(포키 인스펙터 640×360, 폰 가로) — 처음 안내를 그림 왼쪽·글 오른쪽으로 */
@media (max-height: 520px) and (min-aspect-ratio: 1/1) {
  .tcard2 { width: min(620px, 100%); display: grid; grid-template-columns: 44% 1fr; column-gap: 14px; align-items: start; }
  .tpic { grid-column: 1; grid-row: 1 / span 4; margin: -6px 0 -6px -4px; }
  .tdots, .tcard2 h2, .ttext, .tbtns { grid-column: 2; }
  .tdots { margin-top: 0; }
  .tcard2 h2 { font-size: 17px; }
  .ttext { min-height: 0; font-size: 13px; line-height: 1.5; margin-bottom: 8px; }
}

.tload { height: 8px; margin: 0 24px 10px; border-radius: 4px; background: var(--oat); border: 1.5px solid var(--line); overflow: hidden; }
.tload i { display: block; height: 100%; width: 0; background: var(--sage); transition: width .2s; }
body.ready .tload { visibility: hidden; }

/* 사진 */
.flash { position: fixed; inset: 0; z-index: 70; background: #fff; pointer-events: none; animation: flash .45s ease-out forwards; }
@keyframes flash { from { opacity: .85; } to { opacity: 0; } }
.photo { position: fixed; inset: 0; z-index: 65; display: grid; place-items: center; padding: calc(var(--st) + 14px) 14px calc(var(--sb) + 14px); background: rgba(60, 50, 38, .45); opacity: 0; transition: opacity .25s; }
.photo.in { opacity: 1; }
.pcard { width: min(440px, 100%); min-width: 0; overflow: visible; max-height: 100%; display: flex; flex-direction: column; gap: 10px; border-style: solid; border-width: 20px; border-image: url(art/ui/panel.webp?v=20261023013426) 52 fill / 20px stretch; }
.pshot { display: block; width: 94%; max-height: 60vh; object-fit: contain; margin: 2px auto 0; transform: rotate(-1.2deg); }   /* 기울여도 귀퉁이가 잘리지 않게 */
.pbtns { display: flex; gap: 6px; margin-bottom: -6px; }
.pbtns .btn { flex: 1; min-width: 0; padding: 0 6px; }
.pbtns .btn img { width: 22px; height: 22px; object-fit: contain; }
.right { gap: 22px; }

/* 집 종류 고르기 */
.sgrid { grid-template-columns: repeat(3, 1fr); }
.slot.rec { background-image: url(art/ui/btn-sq-on.webp?v=20261023013426); }
/* 취미 방 놀이 */
.home.hobby .hpot { pointer-events: auto; }
.hgame { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; min-height: 64px; }
.hgame .hitem { width: 64px; }
.hgame .hitem.on { background-image: url(art/ui/btn-sq-on.webp?v=20261023013426); transform: translateY(-3px); }
.hcard { width: 54px; height: 70px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; display: grid; place-items: center; transition: transform .2s; }
.hcard img { width: 70%; height: 70%; object-fit: contain; }
.hcard.open { transform: rotateY(0) translateY(-2px); }
.hkey { width: 58px; height: 84px; border-radius: 6px 6px 10px 10px; background: var(--ivory); border: 2px solid var(--line); box-shadow: inset 0 -6px 0 var(--oat); }
.hkey:nth-child(2) { background: #f6e6d2; } .hkey:nth-child(3) { background: #e8edd9; } .hkey:nth-child(4) { background: #ece3f0; }
.hkey.lit { background: #f7d79a; transform: translateY(3px); box-shadow: inset 0 -2px 0 var(--oat); }
.hpage { position: relative; width: 31%; aspect-ratio: 4 / 3; border: 1.5px solid rgba(118, 99, 79, .6); border-radius: 4px; overflow: hidden; background: var(--ivory); }
.hpage img { width: 100%; height: 100%; object-fit: cover; }
.hpage.used { opacity: .55; }
.hpage b { position: absolute; left: 6px; top: 4px; width: 24px; height: 24px; border-radius: 50%; background: var(--line); color: var(--ivory); display: grid; place-items: center; font-size: 13px; }

/* 수수께끼의 상인 */
.mhead { display: flex; gap: 10px; align-items: center; margin-bottom: 6px; }
.mhead img { width: 64px; height: auto; flex: none; }
.mhead p { margin: 0; font-size: 13.5px; line-height: 1.55; font-style: italic; }
.mrow { display: flex; align-items: center; gap: 8px; padding: 8px 0; border-bottom: 1.5px dashed rgba(118, 99, 79, .35); }
.mrow .mic { width: 48px; height: 48px; flex: none; display: grid; place-items: center; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; }
.mrow .mic img { width: 36px; height: 36px; object-fit: contain; }
.mrow .mtx { flex: 1; min-width: 0; }
.mrow .mtx b { display: block; font-size: 15px; }
.mrow .mtx small { font-size: 12px; opacity: .8; line-height: 1.4; display: block; }
.mrow .btn { flex: none; min-height: 40px; padding: 0 10px; }
.mrow .btn img { width: 18px; height: 18px; }
.mrow.sold { opacity: .5; }
.hkey:nth-child(5) { background: #f1e4c4; }
/* 낮은 화면(포키 인스펙터 576×324·640×360·폰 가로) — 양옆 단추를 작게, 이름표 없이, 간격을 좁혀 위 띠와 안 겹치게 */
@media (max-height: 520px) {
  .sq, .right .sq { width: 44px; height: 44px; }
  .sq em { display: none; }
  .left { top: calc(var(--st) + 74px); gap: 8px; }
  .right { bottom: calc(var(--sb) + 52px); gap: 8px; }
  body.editing .right { bottom: calc(var(--sb) + 110px); }
  .top { top: calc(var(--st) + 4px); }
  .badge { width: 46px; height: 46px; }
  .news { bottom: calc(var(--sb) + 6px); }
}

/* 모루의 첫 봄 — 이야기 쪽지·손가락 */
.snote { position: fixed; z-index: 30; top: calc(var(--st) + 196px); left: calc(var(--sl) + 78px); right: calc(var(--sr) + 78px); display: flex; align-items: center; gap: 8px; box-sizing: border-box;
  border-style: solid; border-width: 14px 20px; border-image: url(art/ui/bar-pill.webp?v=20261023013426) 70 76 fill / 14px 20px stretch; opacity: 0; transform: translateY(-6px); transition: opacity .3s, transform .3s; pointer-events: none; }
.snote.on { opacity: 1; transform: none; pointer-events: auto; }
.snote img { width: 34px; height: 34px; object-fit: contain; flex: none; margin: -6px 0; }
.snote p { flex: 1; margin: 0; font-size: 13.5px; line-height: 1.4; }
.snote .sx { position: absolute; right: -4px; bottom: -26px; font: inherit; font-size: 11.5px; color: var(--ivory); background: none; border: 0; padding: 4px 6px; text-shadow: 0 0 3px rgba(70, 56, 40, .95); }
body.placing .snote { top: calc(var(--st) + 70px); left: calc(var(--sl) + 12px); right: calc(var(--sr) + 12px); }
.shand { position: fixed; z-index: 70; left: 0; top: 0; width: 56px; height: auto; pointer-events: none !important; opacity: 0; transform: translate(-50%, -94%); filter: drop-shadow(0 3px 3px rgba(70, 56, 40, .35)); transition: opacity .25s; }
.shand.on { opacity: 1; }
.shand.on[data-kind=tap] { animation: stap 1.1s ease-in-out infinite; }
.shand.on[data-kind=hold] { animation: shold 1.6s ease-in-out infinite; }
@keyframes stap { 0%, 100% { transform: translate(-50%, -104%); } 45% { transform: translate(-50%, -94%) scale(.94); } }
@keyframes shold { 0%, 100% { transform: translate(-50%, -104%); } 25%, 80% { transform: translate(-50%, -94%) scale(.92); } }
.sglow { animation: sglow 1.1s ease-in-out infinite; }
@keyframes sglow { 0%, 100% { box-shadow: 0 0 0 0 rgba(255, 231, 160, 0); } 50% { box-shadow: 0 0 0 5px rgba(255, 231, 160, .9), 0 0 18px 6px rgba(255, 220, 140, .55); } }
.tut.story .ttext { min-height: 0; }

/* 상태는 그림으로 — 날짜·주민·밭 */
.dayrow #v-day { display: inline-flex; align-items: center; gap: 3px; }
.dayrow #v-day img { width: 17px; height: 17px; object-fit: contain; }
.dayrow #v-day b { font-size: 12px; margin-right: 2px; }
.ritem .rt { flex: 1; min-width: 0; }
.ract { display: flex; align-items: center; gap: 4px; flex: none; }
.ract .act { width: 36px; height: 36px; object-fit: contain; }
.rtags { display: flex; flex-direction: column; gap: 2px; }
.rtags img { width: 20px; height: 20px; object-fit: contain; }
.rnow { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 14.5px; }
.rnow img { width: 42px; height: 42px; object-fit: contain; flex: none; }
.rchips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.chip { display: inline-flex; align-items: center; gap: 3px; padding: 2px 8px 2px 4px; border-radius: 999px; background: rgba(243, 235, 220, .9); border: 1.5px solid rgba(118, 99, 79, .45); }
.chip img { width: 22px; height: 22px; object-fit: contain; }
.chip small { font-size: 12px; }
.chip.dim { opacity: .55; }
.chip.warn { border-color: #b77a5a; }
.hearts { display: inline-flex; gap: 1px; vertical-align: middle; }
.hearts img { width: 14px; height: 14px; object-fit: contain; }
.rlikes { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; margin: 10px 0 6px; padding: 8px 2px; border-top: 1.5px dashed rgba(118, 99, 79, .45); border-bottom: 1.5px dashed rgba(118, 99, 79, .45); }
.rlikes .like { display: inline-flex; align-items: center; gap: 4px; }
.rlikes .like > img { width: 30px; height: 30px; object-fit: contain; }
.rlikes .quote { flex-basis: 100%; margin: 2px 0 0; font-size: 13px; opacity: .85; font-style: italic; }
.wish .gift { width: 28px; height: 28px; }
.wish small img, .jobrow small img { width: 15px; height: 15px; vertical-align: -3px; margin-right: 2px; }
.jobrow > img { width: 38px; height: 38px; object-fit: contain; }
.jobrow b { margin-right: 6px; }
.jobtip { display: flex; align-items: center; gap: 8px; font-size: 12.5px; opacity: .85; padding: 8px 2px 2px; }
.jobtip img { width: 30px; height: 34px; object-fit: contain; flex: none; }
.rrels { flex-direction: row; flex-wrap: wrap; gap: 8px 14px; }
.rrel { flex-direction: column; gap: 2px; }
.rlog { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; opacity: .85; }
.rlog img { width: 22px; height: 22px; object-fit: contain; }
.rlog span { font-size: 12.5px; }
.rlog span + span::before { content: '·'; margin-right: 6px; }
.pnow { display: flex; align-items: center; gap: 8px; margin: 0 2px 10px; }
.pnow > img { width: 40px; height: 40px; object-fit: contain; }
.pnow b { font-size: 14px; white-space: nowrap; }
.pnow .wet { width: 24px; height: 24px; }
.pbar { flex: 1; height: 10px; border-radius: 6px; background: var(--oat); border: 1.5px solid var(--line); overflow: hidden; }
.pbar i { display: block; height: 100%; background: #9fb27f; }
.crop .meta { gap: 6px; }
.rhead small.c img { width: 14px; height: 14px; }

/* 첫 이야기 — 서랍장 만화(위에서부터 한 컷씩) */
.comic { position: fixed; inset: 0; z-index: 65; display: flex; flex-direction: column; align-items: center; gap: 10px; padding: calc(var(--st) + 12px) 12px calc(var(--sb) + 12px); background: #efe5d0 url(art/ui/panel.webp?v=20261023013426) center / cover; opacity: 0; transition: opacity .35s; }
.comic.in { opacity: 1; }
.comic.out { opacity: 0; }
.cpanels { flex: 1; min-height: 0; width: min(440px, 100%); display: flex; flex-direction: column; gap: 8px; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.cp { position: relative; margin: 0; flex: none; opacity: 0; transform: translateY(14px); transition: opacity .6s, transform .6s; }
.cp.in { opacity: 1; transform: none; }
.cp img { display: block; width: 100%; aspect-ratio: 2 / 1; object-fit: cover; border: 1.5px solid rgba(118, 99, 79, .6); border-radius: 4px 6px 5px 3px; background: var(--ivory); }
.cp figcaption { position: absolute; left: 6px; right: 6px; bottom: 6px; font-size: 12.5px; line-height: 1.4; padding: 5px 9px; background: rgba(248, 241, 221, .92); border: 1px solid rgba(118, 99, 79, .45); border-radius: 6px; }
.cbtns { width: min(440px, 100%); display: flex; gap: 8px; opacity: .35; pointer-events: none; transition: opacity .4s; }
.cbtns [data-a=skip] { flex: 0 0 30%; }
.cbtns [data-a=go] { flex: 1; }
.comic:not(.choice) .cbtns [data-a=skip] { pointer-events: auto; }
.comic.choice .cbtns [data-a=skip] { flex: 1; }
.comic.done .cbtns { opacity: 1; pointer-events: auto; }
@media (min-aspect-ratio: 1/1) {
  .cpanels { width: min(900px, 100%, calc(2 * (100dvh - var(--st) - var(--sb) - 100px))); display: grid; grid-template-columns: 1fr 1fr; align-content: center; }
  .cbtns { width: min(520px, 100%); }
  .cp figcaption { font-size: 10.5px; line-height: 1.3; padding: 3px 7px; left: 4px; right: 4px; bottom: 4px; }
}

/* 주민 말풍선 — 처음엔 기호, 지낼수록 낱말 */
.talk { position: fixed; z-index: 8; left: 0; top: 0; display: flex; align-items: center; gap: 3px; max-width: 140px; padding: 2px 7px 2px 4px; transform: translate(-50%, -100%) scale(.7); transform-origin: 50% 100%; opacity: 0; transition: opacity .25s, transform .25s; pointer-events: none !important;
  background: rgba(248, 241, 221, .97); border: 1.5px solid rgba(118, 99, 79, .7); border-radius: 14px; box-shadow: 0 2px 4px rgba(70, 56, 40, .18); font-size: 11.5px; line-height: 1.2; white-space: nowrap; }
.talk::after { content: ''; position: absolute; left: 50%; bottom: -5px; width: 8px; height: 8px; margin-left: -4px; background: inherit; border-right: 1.5px solid rgba(118, 99, 79, .7); border-bottom: 1.5px solid rgba(118, 99, 79, .7); transform: rotate(45deg); }
.talk.in { opacity: 1; transform: translate(-50%, -100%); }
.talk img { width: 17px; height: 17px; object-fit: contain; flex: none; }
.talk span { font-weight: 700; color: var(--ink); letter-spacing: .5px; }
.lang { display: flex; align-items: center; gap: 6px; font-size: 12.5px; padding: 2px 2px 8px; border-bottom: 1.5px dashed rgba(118, 99, 79, .35); }
.lang img { width: 26px; height: 26px; object-fit: contain; }
.lang .pbar { max-width: 110px; }
.lang b { font-size: 12.5px; }

.sq[hidden] { display: none !important; }
.slot .pic img.dirt { width: 70%; height: 70%; object-fit: cover; border-radius: 46% 54% 50% 48% / 58% 44% 56% 42%; opacity: .9; }
.jobtip .btn { margin-left: auto; flex: none; padding: 0 14px; }
.snote.zhint { top: auto; bottom: calc(var(--sb) + 150px); }
.merchgot { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 4px 2px 8px; border-bottom: 1.5px dashed rgba(118, 99, 79, .35); margin-bottom: 6px; }
.merchgot > small { width: 100%; font-size: 12px; opacity: .75; }
.merchgot .bslot { width: 70px; }
.bpop { position: absolute; z-index: 5; padding: 9px 10px 10px; background: #f8f1dd url(art/ui/panel.webp?v=20261023013426) center / cover; border: 1.5px solid var(--line); border-radius: 10px; box-shadow: 0 6px 18px rgba(80, 60, 40, .25); display: flex; flex-direction: column; gap: 3px; animation: bpop .16s ease-out; }
.bpop b { font-size: 14px; } .bpop small { font-size: 12px; opacity: .8; }
.bpbtns { display: flex; gap: 6px; margin-top: 6px; } .bpbtns .btn { flex: 1; min-height: 38px; font-size: 13px; padding: 0 6px; }
@keyframes bpop { from { opacity: 0; transform: scale(.94) translateY(-4px); } }
/* 음악방 피아노 — 미드저니 건반 그림을 한 건반씩 깔아 진짜 건반처럼 */
.piano { width: min(100%, 380px); display: flex; flex-direction: column; align-items: stretch; }
.piano .ptop { width: 100%; height: 74px; object-fit: cover; object-position: 50% 30%; border-radius: 10px 10px 0 0; border: 1.5px solid var(--line); border-bottom: 0; }
.pkeys { position: relative; height: 148px; background: #b88c5e; border: 1.5px solid var(--line); border-top: 5px solid #9a6f45; border-radius: 0 0 8px 8px; overflow: hidden; touch-action: none; }
.pw, .pb { position: absolute; top: 0; padding: 0; border: 0; background-position: center; background-size: 100% 100%; background-repeat: no-repeat; -webkit-tap-highlight-color: transparent; transition: transform .06s, filter .06s; }
.pw { width: 10%; height: 100%; background-image: url(art/piano/white.webp?v=20261023013426); box-shadow: inset -1.5px 0 0 rgba(118, 99, 79, .6), inset 0 -9px 0 #ead3b4, inset 0 -10.5px 0 rgba(118, 99, 79, .45); border-radius: 0 0 4px 4px; }
.pb { width: 6.2%; height: 60%; z-index: 2; background-image: url(art/piano/black.webp?v=20261023013426); }
.pw.lit { filter: brightness(.86) sepia(.35); transform: translateY(2px); }
.pb.lit { filter: brightness(1.35); transform: translateY(2px); }
.pw.next::after, .pb.next::after { content: ''; position: absolute; left: 6%; right: 6%; bottom: 12%; height: 34%; border-radius: 45%; background: radial-gradient(rgba(255, 200, 90, 1) 35%, rgba(247, 180, 70, 0) 75%); animation: pnext .7s ease-in-out infinite alternate; }
.pb.next::after { left: -30%; right: -30%; bottom: 4%; height: 40%; }
.pw.next { filter: sepia(.5) saturate(1.6) brightness(1.03); }
.pb.next { filter: sepia(.6) saturate(2) brightness(1.5); }
@keyframes pnext { from { opacity: .45; transform: scale(.85); } to { opacity: 1; transform: scale(1.1); } }
.pw.shake, .pb.shake { animation: pshake .3s; }
@keyframes pshake { 25% { transform: translateX(-2px); } 75% { transform: translateX(2px); } }
.hgame .piano + * { flex-basis: 100%; }
.home .hbtns:has(.btn:nth-child(3)) .btn { flex: 1; min-width: 0; padding: 0 6px; font-size: 14px; }
/* 그림방 — 다 그린 그림이 액자에 담겨 뿅 */
.paintpop { position: absolute; inset: 0; z-index: 40; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; background: rgba(60, 45, 30, .35); opacity: 0; transition: opacity .25s; }
.paintpop.in { opacity: 1; }
.pframe { width: min(82vw, 380px); padding: 12px; background: #c99a63; border: 2px solid var(--line); border-radius: 6px; box-shadow: inset 0 0 0 4px #b3824f, inset 0 0 0 6px #e3c08d, 0 10px 26px rgba(60, 40, 20, .35); transform: scale(.2) rotate(-6deg); }
.paintpop.in .pframe { animation: ppop .6s cubic-bezier(.2, 1.6, .4, 1) forwards; }
.pframe img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border: 1.5px solid rgba(80, 60, 40, .6); }
.paintpop p { margin: 0; padding: 8px 16px; display: flex; flex-direction: column; align-items: center; background: #f8f1dd url(art/ui/panel.webp?v=20261023013426) center / cover; border: 1.5px solid var(--line); border-radius: 10px; }
.paintpop p b { font-size: 16px; } .paintpop p small { font-size: 12.5px; opacity: .8; }
.paintpop .btn { min-width: 150px; }
@keyframes ppop { 0% { transform: scale(.2) rotate(-6deg); } 70% { transform: scale(1.06) rotate(1deg); } 100% { transform: scale(1) rotate(0); } }
/* 소식판 */
.board > div > small { display: block; font-size: 12px; opacity: .75; margin: 6px 0 2px; }
.bnote { display: flex; align-items: center; gap: 8px; margin: 2px 0 6px; padding: 6px 8px; background: rgba(233, 212, 184, .45); border-radius: 8px; font-size: 13.5px; }
.bnote img { width: 28px; height: 28px; object-fit: contain; }
.bres1 { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px dashed rgba(118, 99, 79, .3); cursor: pointer; }
.bres1 .face { border-radius: 50%; background-color: var(--apricot); flex: none; }
.bres1 span { display: flex; flex-direction: column; min-width: 0; font-size: 13.5px; }
.bres1 small { font-size: 12px; opacity: .8; }
.bres1 em { font-style: normal; font-size: 12px; display: flex; align-items: center; gap: 3px; color: #8a5a3a; }
.bres1 em img { width: 16px; height: 16px; }
.bnews p { margin: 0; padding: 5px 0; font-size: 13px; border-bottom: 1px dashed rgba(118, 99, 79, .25); }
/* 책방 — 레시피 퀴즈 */
.qdish { width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 15px; }
.qdish img { width: 48px; height: 48px; object-fit: contain; }
.qopts { width: 100%; display: flex; gap: 6px; justify-content: center; }
.qopt { flex: 1; max-width: 120px; min-height: 58px; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 2px; padding: 4px; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; transition: transform .15s; }
.qopt span { position: relative; display: inline-flex; }
.qopt img { width: 28px; height: 28px; object-fit: contain; }
.qopt b { position: absolute; right: -4px; bottom: -4px; font-size: 11px; background: var(--ivory); border-radius: 8px; padding: 0 3px; border: 1px solid var(--line); }
.qopt.ok { background-image: url(art/ui/btn-sq-on.webp?v=20261023013426); transform: scale(1.06); }
.qopt.no { opacity: .4; }
/* 책방 — 틀린 그림 찾기 */
.spotpop { position: absolute; inset: 0; z-index: 40; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 12px; background: rgba(248, 242, 216, .97); opacity: 0; transition: opacity .25s; }
.spotpop.in { opacity: 1; }
.sphint { margin: 0; font-size: 14px; } .sphint b { margin-left: 6px; }
.spimg { position: relative; width: min(100%, calc((100dvh - 150px) / 2 * 4 / 3), 520px); aspect-ratio: 4 / 3; border: 2px solid var(--line); border-radius: 6px; overflow: hidden; touch-action: manipulation; }
.spimg img { display: block; width: 100%; height: 100%; object-fit: cover; pointer-events: none; }
.spmark { position: absolute; aspect-ratio: 1; transform: translate(-50%, -50%); border: 3px solid #e2574c; border-radius: 50%; box-shadow: 0 0 0 2px rgba(255, 255, 255, .7); animation: spm .3s ease-out; pointer-events: none; }
@keyframes spm { from { transform: translate(-50%, -50%) scale(1.6); opacity: 0; } }
.spimg.shake { animation: pshake .3s; }
body.growing #game { opacity: 0; transition: opacity .6s; }
.srecipe { display: flex; gap: 6px; justify-content: center; margin: 4px 0 6px; }
.rneed { display: flex; flex-direction: column; align-items: center; width: 74px; padding: 4px 0; background: url(art/ui/slot.webp?v=20261023013426) center / 100% 100% no-repeat; font-size: 12px; }
.rneed img { width: 30px; height: 30px; object-fit: contain; } .rneed small { font-size: 10.5px; opacity: .8; }
.rneed.short b { color: #b0584a; }
.cushion { position: relative; width: min(52vw, 210px); aspect-ratio: 1.15; border-radius: 34% 36% 32% 38% / 40% 36% 42% 38%; overflow: hidden; display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; border: 2.5px solid var(--line); box-shadow: inset 0 -14px 24px rgba(80, 60, 40, .22), inset 0 10px 18px rgba(255, 255, 255, .35), 0 10px 22px rgba(60, 40, 20, .3); transform: scale(.2) rotate(-6deg); }
.cushion i { background-size: 175% 175%; background-position: center; background-repeat: no-repeat; background-position: center; filter: saturate(.95); border: 1px dashed rgba(118, 99, 79, .55); }
.cushion i:first-child { grid-row: span 2; }
.cushion .cbtn { position: absolute; left: 50%; top: 50%; width: 15%; aspect-ratio: 1; transform: translate(-50%, -50%); background-size: 300% 100%; background-position: 0 50%; background-repeat: no-repeat; border: 0; border-radius: 50%; filter: drop-shadow(0 2px 2px rgba(60, 40, 20, .35)); }
.cushion.lace { outline: 6px dotted #f3dcd8; outline-offset: -3px; }
.paintpop.in .cushion { animation: ppop .6s cubic-bezier(.2, 1.6, .4, 1) forwards; }
.btn.hold { opacity: .55; pointer-events: none; transition: opacity .3s; }
/* 창이 열려 있으면 알림은 창 위(화면 위쪽)에 — 상인에게 사거나 팔 때 결과가 창에 가리지 않게(10/22) */
body.sheet-open .news { z-index: 70; bottom: auto; top: calc(var(--st) + 128px); }
.spbtns { display: flex; gap: 8px; }
.sphint-glow { position: absolute; aspect-ratio: 1; transform: translate(-50%, -50%); border-radius: 50%; pointer-events: none; background: radial-gradient(rgba(255, 236, 160, .55), rgba(255, 220, 120, 0) 70%); animation: hintglow 1.6s ease-out forwards; }
@keyframes hintglow { 0% { opacity: 0; transform: translate(-50%, -50%) scale(1.6); } 25% { opacity: 1; transform: translate(-50%, -50%) scale(1); } 100% { opacity: 0; } }
.paintpop.gallery { position: fixed; z-index: 70; }
.gbtns { display: flex; gap: 8px; } .gbtns .btn { min-width: 64px; }
.bpop > .btn { margin-top: 6px; min-height: 36px; font-size: 13px; }
/* 모루 가게(10/23) */
.shop { display: flex; flex-direction: column; gap: 8px; }
.shop > .tip { margin: 0 0 2px; }
.gitem { display: flex; align-items: center; gap: 10px; padding: 8px 6px; border: 1.5px solid rgba(118, 99, 79, .35); border-radius: 10px 12px 9px 11px; background: rgba(255, 250, 238, .55); }
.gitem.focus { border-color: #8a9a5b; box-shadow: 0 0 0 2px rgba(138, 154, 91, .35); }
.gitem.owned { opacity: .8; }
.gpic { position: relative; flex: none; width: 64px; height: 64px; display: grid; place-items: center; }
.gpic img { max-width: 56px; max-height: 60px; }
.gpic img.sub { position: absolute; right: -4px; bottom: -2px; max-width: 30px; max-height: 32px; }
.gtxt { flex: 1; min-width: 0; text-align: left; }
.gtxt b { display: block; font-size: 15px; }
.gtxt small { display: block; font-size: 12px; line-height: 1.4; opacity: .85; margin-top: 2px; }
.gitem .btn { flex: none; width: auto; min-width: 0; min-height: 40px; padding: 0 2px; border-width: 10px 12px; border-image-width: 10px 12px; font-size: 13.5px; white-space: nowrap; }
.gitem .btn:disabled { opacity: .75; }
.shopfoot { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; margin-top: 4px; }
.shopfoot .btn { font-size: 12.5px; padding: 6px 10px; }
.ritem.guest { opacity: .78; }
.ritem.guest .rt small { color: #7a6a3e; }
/* 숲이 넓어져 다시 열 때 — 표지 그림 없이 한 줄만(10/23) */
html.quick #title .tcover, html.quick #title .tlogo, html.quick #title .tsub, html.quick #title .tgo { display: none; }
html.quick #title .tcard::before { content: '숲 너머가 열리는 중…'; display: block; font-size: 16px; margin-bottom: 10px; }
/* 애드핏 줄(숫자 주소 판만) — 맨 아래에 붙이고 화면 위 단추·띠는 그만큼 올린다 */
#adbar { visibility: hidden; position: fixed; left: 0; right: 0; bottom: var(--sb0, env(safe-area-inset-bottom, 0px)); height: 50px; display: flex; justify-content: center; align-items: center; background: rgba(239, 229, 208, .92); z-index: 40; }
body.has-ad { --sb: calc(env(safe-area-inset-bottom, 0px) + 50px); }
body.has-ad #adbar { visibility: visible; }
/* 넓은 화면(웹판)에서 안내가 가로로 길게 늘어나지 않게 — 가운데 상자로(10/23) */
.snote, body.placing .snote { max-width: 440px; margin-left: auto; margin-right: auto; }
