ćƒ”ć‚¤ćƒ³ć‚³ćƒ³ćƒ†ćƒ³ćƒ„ćøć‚¹ć‚­ćƒƒćƒ—
č¦‹å‡ŗć—ē”»åƒ

å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖšŸ–ŠšŸ“± #AI ćØć§ććŸć“ćØ #Gemini #Canvas #Notebook

    ę–‡å­—ć‚’ć€Œę›øćć€ć“ćØćÆć€ćšć£ćØå½“ćŸć‚Šå‰ć ćØę€ć£ć¦ć„ć¾ć—ćŸć€‚
    å¤±ć†ć€ćć®ę—„ć¾ć§ćÆć€‚

    ć“ć“ęœ€čæ‘ć€ä½“čŖæć‚’å“©ć—ć€ę€ć†ć‚ˆć†ć«ä½“ć‚’å‹•ć‹ć›ćŖć„ę—„ć€…ćŒē¶šć„ć¦ć„ć¾ć—ćŸć€‚ē‰¹ć«č¾›ć‹ć£ćŸć®ćÆć€å³č…•ćŒę›²ćŒć‚‰ćŖććŖć£ć¦ć—ć¾ć£ćŸć“ćØć€‚

    åˆ©ćę‰‹ć§ć‚ć‚‹å³ę‰‹ćŒä½æćˆćŖććŖć‚Šć€
    ę–‡å­—ć‚’ę›øćć“ćØć‚‚ć€ć‚­ćƒ¼ćƒœćƒ¼ćƒ‰ć§ę–‡å­—ć‚’ę‰“ć¤ć“ćØć‚‚ć€
    ę€ć†ć‚ˆć†ć«ć§ćć¾ć›ć‚“ć€‚


    ę—„åøøć®ä½•ę°—ćŖć„å‹•ä½œćŒę¬”ć€…ćØé›£ć—ććŖć‚Šć€
    å½“ćŸć‚Šå‰ć«ć§ćć¦ć„ćŸć“ćØćŒć€
    ć“ć‚“ćŖć«ć‚‚å¤§åˆ‡ć ć£ćŸć®ć ćØåˆć‚ć¦ę°—ć„ć‹ć•ć‚Œć¾ć—ćŸć€‚


    ę…£ć‚ŒćŖć„å·¦ę‰‹ć§ć®ć‚æć‚¤ćƒ”ćƒ³ć‚°ćÆć€
    ęƒ³åƒä»„äøŠć«ę™‚é–“ćŒć‹ć‹ć‚Šć€ć©ć£ćØē–²ć‚Œć¦ć—ć¾ć„ć¾ć™ć€‚

    ć‚¹ćƒžćƒ›ć®éŸ³å£°å…„åŠ›ć«é ¼ć£ć¦ćæć¦ć‚‚ć€
    å°čŖ¬ć®ć‚ˆć†ćŖé•·ę–‡ć‚’ē¶“ć‚‹ć®ćÆć€č‡³é›£ć®ę„­ā€¦šŸ’¦


    ć€Œä»Šå¹“ć®ć€Žå‰µä½œå¤§č³ž2026ć€ćøć®ę–°č¦åæœå‹ŸćÆć€
    ć‚‚ć†č«¦ć‚ć‚‹ć—ć‹ćŖć„ć®ć‹ćŖā€¦ā€¦ć€‚ć€

    ćć†č½ć”č¾¼ć‚“ć§ć„ć¾ć—ćŸć€‚


    å‰µä½œå¤§č³ž2026ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ć€å®Œå…Øē„”ę–™ćƒ»ē„žć‚¢ćƒ—ćƒŖć€‘å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖšŸ“±iPadćƒ»ć‚¹ćƒžćƒ›ćƒ»PCć§ćƒšćƒ³å­—ē·“ēæ’šŸ–Š #ē¾Žę–‡å­— #ć‚¢ćƒ—ćƒŖ #ai #Gemini #canvas


    ę—„ęœ¬čŖžē‰ˆā†“

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ |🐰Koroć”ć‚ƒć‚“šŸŒøå…Žč€³ć‚³ćƒ­šŸ’–å‰µä½œå¤§č³ž2026šŸ’Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-Hikari no Kakera


    č‹±čŖžē‰ˆā†“ć€€ā€»AIć«ć‚ˆć‚‹č‡Ŗå‹•ēæ»čØ³notečØ˜äŗ‹

    Creative Awards 2026 #AllCategoriesSection šŸ’” Born from the despair of my right arm not moving. A digital handwriting practice book created with AI that is "easy to write with the left hand" šŸ–Š A multi-functional web app that runs on iPad! Supports Hiragana, Katakana, Romaji, and numbers #PlayWithAI #WhenIFeelMyChildGrowing #StartedWithAI #HowToOvercomeASlump|🐰Koroć”ć‚ƒć‚“šŸŒøå…Žč€³ć‚³ćƒ­šŸ’–å‰µä½œå¤§č³ž2026šŸ’Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-Hikari no Kakera
    DIGITAL HANDWRITING PRACTICE NOTEBOOK

    Creative Awards 2026 #AllCategoriesSection šŸ’” Born from the despair of my right arm not moving. A digital handwriting practice book created with AI that is "easy to write with the left hand" šŸ–Š A multi-functional web app that runs on iPad! Supports Hiragana, Katakana, Romaji, and numbers #PlayWithAI #WhenIFeelMyChildGrowing #StartedWithAI #HowToOvercomeASlump|🐰Koroć”ć‚ƒć‚“šŸŒøå…Žč€³ć‚³ćƒ­šŸ’–å‰µä½œå¤§č³ž2026šŸ’Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-Hikari no Kakera



    šŸ”„ å‰µä½œć®ēÆć‚’ēµ¶ć‚„ć—ćŸććŖćć¦

    ćć‚Œć§ć‚‚č«¦ć‚ćć‚ŒćŖć‹ć£ćŸć®ćÆć€
    ē§ć«ćÆå¤§åˆ‡ćŖä½œå“ćØć€
    ćć‚Œć‚’ę”Æćˆć¦ćć‚Œć‚‹äŗŗćŸć”ćŒć„ć‚‹ć‹ć‚‰
    恧恙怂


    Shionć”ć‚ƒć‚“ć®ć‚¹ć‚æćƒ³ćƒ— - LINE ć‚¹ć‚æćƒ³ćƒ— | LINE STORE


    ę˜Øå¹“ć€ć‚Øćƒ³ć‚æćƒ”åŽŸä½œéƒØé–€ć§åæœå‹Ÿć—ćŸå°čŖ¬
    ć€Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-ć€āœØ

    ä»Šå¹“ćÆć‚«ćƒ†ć‚“ćƒŖćƒ¼ć‚’å¤‰ę›“ć—ć€
    ćƒ•ć‚”ćƒ³ć‚æć‚øćƒ¼å°čŖ¬éƒØé–€ļ¼ˆTALES)にて
    å†ć³åæœå‹Ÿć•ć›ć¦ć„ćŸć ćć¾ć—ćŸšŸŽŠ

    šŸ–Š å°čŖ¬ć€Œå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-怍

    šŸ“šćƒžć‚¬ć‚øćƒ³ćÆć“ć”ć‚‰
    šŸ”— å‰µä½œå¤§č³ž2026šŸ’Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-|note

    ć“ć®ä½œå“ćÆć€ę˜Øå¹“ćŖć‚“ćØ
    10äø‡å­—ć‚’č¶…ćˆć‚‹ę„Ÿęƒ³ć‚’ć„ćŸć ćć€
    ćŸćć•ć‚“ć®ę–¹ć«ćƒ•ć‚”ćƒ³ć‚¢ćƒ¼ćƒˆć‚’ęć„ć¦ć„ćŸć ć„ćŸć€
    ē§ć®å®ē‰©ć®ć‚ˆć†ćŖä½œå“ć§ć™šŸ’Ž

    ć•ć‚‰ć«ć€ę˜ ē”»åŒ–ć‚’ē›®ęŒ‡ć—ć¦åˆć®ęµ·å¤–ćƒ”ćƒ³ćƒćƒ¼ćØå”åŠ›ć—ć€
    ć‚¢ćƒ‹ćƒ”ę˜ åƒåŒ–ļ¼ˆć‚¹ćƒšć‚·ćƒ£ćƒ«ćƒ”ćƒ‰ćƒ¬ćƒ¼MV)まで
    ęžœćŸć™ć“ćØćŒć§ćć¾ć—ćŸšŸ›«


    šŸ’¬ ę„Ÿęƒ³äø€č¦§ļ¼†ćƒ•ć‚”ćƒ³ć‚¢ćƒ¼ćƒˆē‰¹é›†

    šŸ’Œ10äø‡å­—ć®ę„›ćŒč©°ć¾ć£ćŸę„Ÿęƒ³ć¾ćØć‚
    šŸ”— ć€å‰µä½œå¤§č³žę„Ÿęƒ³ć€‘ä½œå“ę”ˆå†…ļ¼†ēš†ę§˜ć®ę„Ÿęƒ³äø€č¦§āœØ

    šŸŽØ ęµ·å¤–é›‘čŖŒé¢Øļ¼ćƒ•ć‚”ćƒ³ć‚¢ćƒ¼ćƒˆē‰¹é›†
    šŸ”— AI ART TOKYO 2025 - Kawaii Wonderland

    šŸŽ¬ ć‚¢ćƒ‹ćƒ”ę˜ åƒåŒ–ļ¼ˆYouTube)
    åˆć®ęµ·å¤–ćƒćƒ¼ćƒ ćØć®å…±åŒåˆ¶ä½œļ¼
    ę—„ęœ¬čŖžć®ć‚¹ćƒšć‚·ćƒ£ćƒ«ćƒ”ćƒ‰ćƒ¬ćƒ¼ć§ć™ā™Ŗ
    ćœć²ć€ć”č¦§ćć ć•ć„šŸ‡

    šŸŽµå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-å†ē”ŸćƒŖć‚¹ćƒˆ

    ē·ē‰¹é›†šŸ’«å…‰ē‰‡ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©šŸ’Ž
    Hikari no KakerašŸŖ„Fragments of LightšŸ’ - YouTube


    ā–¶ļø Hikari no Kakera – The Miracle Answer | Cinematic Anime Music Video


    ā–¶ļø Hikari no Kakera MV: ~ Dreams of Parallel Lines ~



    šŸ’” é€†å¢ƒć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€Œå·¦ę‰‹ć®ćŸć‚ć®ć€ć‚¢ćƒ—ćƒŖ

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”
    å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚
    AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–Š
    iPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼
    ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ

    ę–°ä½œå°čŖ¬ć®åŸ·ē­†ćÆé›£ć—ć„ć€‚
    ć§ć‚‚ć€ä»Šć®ē§ć ć‹ć‚‰ć“ćē”Ÿćæå‡ŗć›ć‚‹ć‚‚ć®ćŒć‚ć‚‹ćÆćšć€‚

    ćć†č€ƒćˆćŸē§ćÆć€
    怌AIć‚’é§†ä½æć—ć¦ć€ä»Šć®č‡Ŗåˆ†ć®äøä¾æć•ć‚’
    ę‰“é–‹ć™ć‚‹ć‚¢ćƒ—ćƒŖć‚’ä½œć‚ć†ļ¼ć€
    ćØę±ŗę„ć—ć¾ć—ćŸć€‚

    ćć†ć—ć¦čŖ•ē”Ÿć—ćŸć®ćŒć€ä»Šå›ž
    ć€å‰µä½œå¤§č³ž2026ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ć€‘ć§åæœå‹Ÿć™ć‚‹ć€
    ćƒ–ćƒ©ć‚¦ć‚¶äøŠć§å‹•ć
    怌
    å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖć€ć§ć™ć€‚


    ē§ćØåŒć˜ć‚ˆć†ć«ć€Œå·¦ę‰‹ć€ćŖć©ē‰‡ę‰‹ć§ę–‡å­—ć‚’ę›øćč‹¦åŠ“ć‚’ć—ć¦ć„ć‚‹ę–¹ć€
    ć€Œå³ę‰‹ć€ć§å­—ć‚’ē¶ŗéŗ—ć«ę›øććŸć„ļ¼ˆćƒŖćƒćƒ“ćƒŖć—ćŸć„ļ¼‰ę–¹ć€
    ę–‡å­—ć‚’å­¦ć³å§‹ć‚ćŸå­ć©ć‚‚ćŸć”ć‚„å¤–å›½äŗŗć®ę–¹ć€
    ćƒšćƒ³å­—ē·“ēæ’åø³ć‚’ćƒ‡ć‚øć‚æćƒ«åŒ–ć—ćŸć„ę–¹ćøć€‚

    やさしさと使いやすさを詰め込んだ、
    5つの特従をご瓹介します!


    å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖć®CMšŸ’•å‰µä½œå¤§č³ž2026,ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€,å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ’•ē¾Žę–‡å­—,ćƒšćƒ³å­—,ćƒšćƒ³å­—ē·“ēæ’,文字緓習,ę‰‹ę›øćē·“ēæ’,ćŖćžć‚Šę›øć,ć²ć‚‰ćŒćŖē·“ēæ’,ē„”ę–™ć‚¢ćƒ—ćƒŖ,ē„žć‚¢ćƒ—ćƒŖ,ä¾æåˆ©ć‚¢ćƒ—ćƒŖ,ćŠć™ć™ć‚ć‚¢ćƒ—ćƒŖ,å­¦ēæ’ć‚¢ćƒ—ćƒŖ,ę•™č‚²ć‚¢ćƒ—ćƒŖ,ēŸ„č‚²ć‚¢ćƒ—ćƒŖ,iPad,iPad擻用法,iPad勉強法,Apple Pencil,ć‚¹ćƒžćƒ›ć‚¢ćƒ—ćƒŖ,Webć‚¢ćƒ—ćƒŖ,ćƒ–ćƒ©ć‚¦ć‚¶ć‚¢ćƒ—ćƒŖ,ćƒ‡ć‚øć‚æćƒ«å­¦ēæ’,AI,ē”ŸęˆAI,Gemini,Google Gemini,AIć‚¢ćƒ—ćƒŖ,AI開発,ć‚¢ćƒ—ćƒŖé–‹ē™ŗ,個人開発,ćƒŽćƒ¼ć‚³ćƒ¼ćƒ‰,ćƒć‚¤ćƒ–ć‚³ćƒ¼ćƒ‡ć‚£ćƒ³ć‚°,ChatGPT,č‹±čŖžå­¦ēæ’,ę—„ęœ¬čŖžå­¦ēæ’,ćƒ­ćƒ¼ćƒžå­—ē·“ēæ’,ćƒŖćƒćƒ“ćƒŖ,ä½œę„­ē™‚ę³•,å·¦åˆ©ć,å³åˆ©ć,äø”åˆ©ć,ć‚¢ć‚Æć‚»ć‚·ćƒ“ćƒŖćƒ†ć‚£,ćƒćƒŖć‚¢ćƒ•ćƒŖćƒ¼,ć‚¤ćƒ³ć‚Æćƒ«ćƒ¼ć‚·ćƒ–ćƒ‡ć‚¶ć‚¤ćƒ³,EdTech
    å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖć®CM
    QRć‚³ćƒ¼ćƒ‰ć‚’čŖ­ćæč¾¼ć‚€ćØć€ć“ć®noteć«ć‚øćƒ£ćƒ³ćƒ—ć—ć¾ć™šŸ”—


    šŸ–Šå¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖ

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    å¤šę©Ÿčƒ½ćƒ˜ćƒƒćƒ€ćƒ¼ćƒœć‚æćƒ³

    ćƒ˜ćƒƒćƒ€ćƒ¼ć®å¤šę©Ÿčƒ½ćƒœć‚æćƒ³ć‹ć‚‰ć€ć‚ć‚‰ć‚†ć‚‹ę“ä½œćŒē›“ę„Ÿēš„ć«č”Œćˆć¾ć™ļ¼

    ä¾‹ćˆć°ć€ć€ć€

    • ć²ć‚‰ćŒćŖ ⇔ ć‚«ć‚æć‚«ćƒŠ ⇔ ćƒ­ćƒ¼ćƒžå­— ⇔ ę•°å­— ć®åˆ‡ć‚Šę›æćˆ

    • å·¦ę‰‹ē”Øā‡”å³ę‰‹ē”Ø

    • äæå­˜å½¢å¼ļ¼ˆPNGē”»åƒ ⇔ PDFļ¼‰ć®éøęŠž

    • čØ€čŖžå¤‰ę›ļ¼ˆę—„ęœ¬čŖžā‡”č‹±čŖžļ¼‰

    • éŸ³å£°čŖ­ćæäøŠć’ć€ć‚ŗćƒ¼ćƒ ę“ä½œćŖć©


    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    ć‚¢ćƒ—ćƒŖē”»é¢ä¾‹


    šŸ“± ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖć®5大特従

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖć€€
    5つの特従

    1. ć€Œå·¦åˆ©ćć€ć«å®Œå…ØåÆ¾åæœć—ćŸć‚„ć•ć—ć„UI

    ęœ€å¤§ć®ć“ć ć‚ć‚ŠćÆć€Œåˆ©ćę‰‹åˆ‡ć‚Šę›æćˆę©Ÿčƒ½ć€ć§ć™ć€‚
    ć€Œå·¦ę‰‹ē”Øļ¼ˆčµ¤č‰²ćƒ†ćƒ¼ćƒžļ¼‰ć€ć«åˆ‡ć‚Šę›æćˆć‚‹ćØć€
    ę›øć„ć¦ć„ć‚‹ę‰‹ć§ę–‡å­—ćŒéš ć‚Œć¦ć—ć¾ć‚ćŖć„ć‚ˆć†ć«ć€
    ć€ŒćŠę‰‹ęœ¬ćƒ»ćŖćžć‚Šę›øććƒ»ē·“ēæ’ć€ć®ćƒžć‚¹ē›®ć®äø¦ć³é †ćŒåč»¢ć—ć¾ć™ć€‚
    å·¦åˆ©ćć®ćŠå­ę§˜ć®å­¦ēæ’ć«ć‚‚ęœ€é©ć§ć™ļ¼

    2. č±ŠåÆŒćŖę–‡å­—ēØ®ćØć€Œę®µéšŽēš„ć€ćŖå­¦ēæ’ć‚¹ćƒ†ćƒƒćƒ—

    ćŸć äŗ”åéŸ³ć‚’äø¦ć¹ć‚‹ć®ć§ćÆćŖćć€
    ę›øćć‚„ć™ć„ę–‡å­—ć‹ć‚‰ē·“ēæ’ć§ćć‚‹
    ć€Œć‚¹ćƒ†ćƒƒćƒ—ć‚¢ćƒƒćƒ—ę–¹å¼ć€ć‚’ęŽ”ē”Øć€‚

    • ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠļ¼š
      1ē”»ć®ē°”å˜ćŖę–‡å­—ć‹ć‚‰č¤‡é›‘ćŖę–‡å­—ćøć€‚
      äŗ”åéŸ³č”Øļ¼ˆēø¦ęØŖļ¼‰ć‚‚å®Œå‚™

    • ćƒ­ćƒ¼ćƒžå­—ļ¼š
      å¤§ę–‡å­—ćƒ»å°ę–‡å­—ć€ęæéŸ³ćƒ»ę‹—éŸ³ć‹ć‚‰ć€
      ć€Œćƒ˜ćƒœćƒ³å¼ćØčØ“ä»¤å¼ć®é•ć„
      ļ¼ˆćƒ‘ć‚¹ćƒćƒ¼ćƒˆč”ØčØ˜ćØå­¦ę ”ę•™č‚²ć®é•ć„ļ¼‰ć€
      ćØć„ć£ćŸ
      å®Ÿč·µēš„ćŖå†…å®¹ć¾ć§ć‚«ćƒćƒ¼

    • ę•°å­—ļ¼š
      ē®—ē”Øę•°å­—ļ¼ˆ0怜9ļ¼‰ćØę¼¢ę•°å­—ļ¼ˆäø€ć€œäø‡ć€ć€‡ć€å††ļ¼‰

    3. ć‚æćƒƒćƒ—ć§ē™ŗéŸ³ļ¼ć€ŒéŸ³å£°čŖ­ćæäøŠć’ę©Ÿčƒ½ć€

    ćŠę‰‹ęœ¬ć®ę–‡å­—ć‚’ć‚æćƒƒćƒ—ć™ć‚‹ćØć€ćć®ę–‡å­—ć‚’éŸ³å£°ć§čŖ­ćæäøŠć’ć¾ć™šŸŽµ

    ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆćÆćƒć‚¤ćƒ†ć‚£ćƒ–é¢Øć«ć€
    ćƒ­ćƒ¼ćƒžå­—ćÆę—„ęœ¬čŖžć®éŸ³ć§čŖ­ć‚€ćŖć©ē“°ć‹ćčŖæę•“ć€‚

    ćƒšćƒ¼ć‚øå…Øä½“ć‚’äø€ę°—ć«čŖ­ćæäøŠć’ć‚‹ćƒœć‚æćƒ³ć‚‚ć‚ć‚Šć€
    ć€Œč€³ć€ć‹ć‚‰ć®å­¦ēæ’ć‚‚ć‚µćƒćƒ¼ćƒˆć—ć¾ć™ć€‚

    4. ćƒ‡ć‚øć‚æćƒ«ćŖć‚‰ć§ćÆć®ć€Œę›øćč¾¼ćæļ¼†äæå­˜ę©Ÿčƒ½ć€

    • ćƒšćƒ³ļ¼†ę¶ˆć—ć‚“ćƒ ļ¼š
      iPadē­‰ć®ć‚æćƒ–ćƒ¬ćƒƒćƒˆć‚„PCć‹ć‚‰ć€ē›“ęŽ„ē”»é¢ć«ę–‡å­—ć‚’ę›øćč¾¼ć‚ć¾ć™ć€‚

    • ć‚ŗćƒ¼ćƒ ļ¼†ē§»å‹•ļ¼ˆćƒ‘ćƒ³ļ¼‰ļ¼š
      å°ć•ć„ē”»é¢ć§ć‚‚ę‹”å¤§ć—ć¦ē“°ć‹ć„ē·“ēæ’ćŒåÆčƒ½ć€‚

    • PDF / ē”»åƒļ¼ˆPNGļ¼‰äæå­˜ļ¼š
      ę›øć„ćŸćƒšćƒ¼ć‚øć‚’ć¾ćØć‚ć¦äæå­˜ļ¼
      ćƒ—ćƒŖćƒ³ćƒˆć‚¢ć‚¦ćƒˆć—ć¦ć€Œē“™ć®ćƒ‰ćƒŖćƒ«ć€ćØć—ć¦ä½æć†ć“ćØć‚‚ć§ćć¾ć™šŸ“–
      (PC悄iPadć€ć‚æćƒ–ćƒ¬ćƒƒćƒˆćŖć©ć§äæå­˜ć—ć‚„ć™ć„ē”»åƒäæå­˜ä»˜ćļ¼‰

    5. ä½æć†äŗŗć«åÆ„ć‚Šę·»ć£ćŸć€Œä¾æåˆ©ćŖåˆ‡ć‚Šę›æćˆę©Ÿčƒ½ć€

    • ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰åÆ¾åæœļ¼š
      å¤œé–“ć®å­¦ēæ’ć‚„ē›®ć«é…ę…®ć—ćŸé»’čƒŒę™Æćƒ¢ćƒ¼ćƒ‰ć€‚
      ę›øć„ćŸē·šć®č‰²ć‚‚č‡Ŗå‹•ć§ē™½é»’åč»¢ć—ć¾ć™ć€‚

    • ę—„č‹±ćƒć‚¤ćƒŖćƒ³ć‚¬ćƒ«åÆ¾åæœļ¼š
      ćƒœć‚æćƒ³äø€ć¤ć§ćƒ”ćƒ‹ćƒ„ćƒ¼ć‚’ć€Œę—„ęœ¬čŖžā‡”č‹±čŖžć€ć«åˆ‡ć‚Šę›æćˆåÆčƒ½ļ¼
      ę—„ęœ¬čŖžć‚’å‹‰å¼·äø­ć®å¤–å›½äŗŗć®ę–¹ć«ć‚‚ćć®ć¾ć¾ä½æćˆć¾ć™ć€‚



    šŸ“Ā ć‚¢ćƒ—ćƒŖć®ē”»é¢ćØä½æć„ę–¹ļ¼ˆWEB惻HTML)

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–Š
    iPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖ

    ā€ŽGemini - Google AI ć«ē›“ęŽ„ć‚¢ć‚Æć‚»ć‚¹

    ć“ć®ć‚¢ćƒ—ćƒŖć®ęœ€å¤§ć®ć“ć ć‚ć‚ŠćÆć€
    äø”åˆ©ćåÆ¾åæœć‹ć¤ćƒ‡ć‚øć‚æćƒ«WEBć‚¢ćƒ—ćƒŖć§ć€
    ä½•åŗ¦ć§ć‚‚ē¹°ć‚Ščæ”ć—ćƒˆćƒ¬ćƒ¼ćƒ‹ćƒ³ć‚°ć«ä½æćˆć¾ć™ļ¼ļ¼

    ć•ć‚‰ć«ć€ćŸć ć€ć‚ć„ć†ćˆćŠé †ć«ć€
    äŗ”åéŸ³é †ć«ę–‡å­—ć‚’äø¦ć¹ć‚‹ć®ć§ćÆćŖćć€
    ć€Œę›øćć‚„ć™ć„ę–‡å­—ć‹ć‚‰å°‘ć—ćšć¤é›£ę˜“åŗ¦ć‚’äøŠć’ć¦ć„ćć€
    ē‹¬č‡Ŗć®ć‚¹ćƒ†ćƒƒćƒ—ć‚¢ćƒƒćƒ—ę–¹å¼
    ć‚’ęŽ”ē”Øć—ć¦ć„ć‚‹ē‚¹ć§ć™ć€‚


    šŸ”˜ćƒ˜ćƒƒćƒ€ćƒ¼ć®č§£čŖ¬

    å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ šŸ’”å³č…•ćŒå‹•ć‹ćŖć„ēµ¶ęœ›ć‹ć‚‰ē”Ÿć¾ć‚ŒćŸć€‚AIćØå‰µć£ćŸć€Œå·¦ę‰‹ć§ć‚‚ę›øćć‚„ć™ć„ć€ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖļ¼ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—åÆ¾åæœ #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹
    ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³šŸ–ŠiPadć§å‹•ćå¤šę©Ÿčƒ½WEBć‚¢ćƒ—ćƒŖ
    ćƒ˜ćƒƒćƒ€ćƒ¼ć®č§£čŖ¬

    ć“ć®ćƒ˜ćƒƒćƒ€ćƒ¼ćÆć€ē”»åƒćƒ»č³‡ę–™ć®é–²č¦§ć‚„ē·Øé›†ć€äæå­˜ćŖć©ć‚’č”Œć†ćŸć‚ć®ćƒ”ćƒ‹ćƒ„ćƒ¼ć§ć™ć€‚

    1. Ā ć²ć‚‰ćŒćŖļ¼ć‚«ć‚æć‚«ćƒŠåˆ‡ć‚Šę›æćˆĀ 
      ć²ć‚‰ćŒćŖćØć‚«ć‚æć‚«ćƒŠć‚’ē›øäŗ’ć«åˆ‡ć‚Šę›æćˆć¾ć™ć€‚

    2. Ā ćƒ­ćƒ¼ćƒžå­—ćƒ»ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆļ¼ˆć‚»ćƒƒćƒˆļ¼‰
      ćƒ­ćƒ¼ćƒžå­—č”ØčØ˜ćØć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆč”ØčØ˜ć‚’ć‚»ćƒƒćƒˆć§č”Øē¤ŗć—ć¾ć™ć€‚

    3. Ā ę•°å­—ćƒ»ę¼¢ę•°å­—ļ¼ˆć‚»ćƒƒćƒˆļ¼‰
      ę•°å­—ćØę¼¢ę•°å­—ć‚’ć‚»ćƒƒćƒˆć§č”Øē¤ŗć—ć¾ć™ć€‚

    4. Ā åˆ©ćę‰‹åˆ‡ć‚Šę›æćˆ
      å·¦ę‰‹ē”Øļ¼ˆćƒ‡ćƒ•ć‚©ćƒ«ćƒˆļ¼‰ć‹ć‚‰å³ę‰‹ē”Øćøć®åˆ‡ć‚Šę›æćˆćŒć§ćć¾ć™

    5. Ā ę¶ˆåŽ»
      éøęŠžć—ćŸéƒØåˆ†ć‚„ę›øćč¾¼ćæć‚’ę¶ˆåŽ»ć—ć¾ć™ć€‚

    6. Ā å…Øę¶ˆåŽ»
      ē”»é¢äøŠć®ć™ć¹ć¦ć®ę›øćč¾¼ćæć‚„å…„åŠ›å†…å®¹ć‚’ę¶ˆåŽ»ć—ć¾ć™ć€‚

    7. Ā äæå­˜å½¢å¼ļ¼ˆPNG / PDF)
      PNG または PDF å½¢å¼ć§ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰ćƒ»äæå­˜ć§ćć¾ć™ć€‚

    8. Ā äæå­˜ļ¼ˆē¾åœØć®ćƒšćƒ¼ć‚øļ¼‰
      ē¾åœØć®ćƒšćƒ¼ć‚øć‚’ē”»åƒćƒ•ć‚”ć‚¤ćƒ«ćØć—ć¦äæå­˜ć—ć¾ć™ć€‚

    9. Ā å…Øäæå­˜ļ¼ˆć™ć¹ć¦ć®ćƒšćƒ¼ć‚øļ¼‰
      ć™ć¹ć¦ć®ćƒšćƒ¼ć‚øć‚’ć¾ćØć‚ć¦ē”»åƒćƒ•ć‚”ć‚¤ćƒ«ćØć—ć¦äæå­˜ć—ć¾ć™ć€‚

    10. Ā ęē”»ćƒ„ćƒ¼ćƒ«
      ćƒšćƒ³ćƒ»ę¶ˆć—ć‚“ćƒ ćƒ»ę‰‹ć®ć²ć‚‰ļ¼ˆē§»å‹•ļ¼‰ć‚’éøęŠžć§ćć¾ć™ć€‚

    11. Ā ćƒšćƒ¼ć‚øē§»å‹•
      ćƒ›ćƒ¼ćƒ ļ¼ˆęœ€åˆć®ćƒšćƒ¼ć‚øć«ęˆ»ć‚‹ļ¼‰ćƒ»å‰ćøćƒ»ę¬”ćøć§ćƒšćƒ¼ć‚øć‚’ć‚ćć‚Šć¾ć™ć€‚

    12. Ā č”Øē¤ŗćƒ»ć‚ŗćƒ¼ćƒ 
      ć‚ŗćƒ¼ćƒ ć‚¢ć‚¦ćƒˆćƒ»å…Øē”»é¢č”Øē¤ŗćƒ»ć‚ŗćƒ¼ćƒ ć‚¤ćƒ³ćŒåˆ©ē”Øć§ćć¾ć™ć€‚

    13. Ā éŸ³å£°å†ē”Ÿ
      éŸ³å£°ć®å†ē”Ÿļ¼åœę­¢ć‚’č”Œć„ć¾ć™ć€‚

    14. Ā čØ€čŖžåˆ‡ć‚Šę›æćˆ
      ę—„ęœ¬čŖžćØč‹±čŖžć‚’åˆ‡ć‚Šę›æćˆć§ćć¾ć™ć€‚

    15. Ā č”Øē¤ŗę–¹å‘åˆ‡ć‚Šę›æćˆ
      ēø¦ę›øććØęØŖę›øćć®äø€č¦§č”Øē¤ŗć‚’åˆ‡ć‚Šę›æćˆć§ćć¾ć™ć€‚

    16. Ā ćƒ†ćƒ¼ćƒžåˆ‡ć‚Šę›æćˆ
      ćƒ©ć‚¤ćƒˆćƒ¢ćƒ¼ćƒ‰ćØćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ć‚’åˆ‡ć‚Šę›æćˆć§ćć¾ć™ć€‚

    ćƒć‚¤ćƒ³ćƒˆ

    ē”Øé€”ć‚„å­¦ēæ’ć‚¹ć‚æć‚¤ćƒ«ć«åˆć‚ć›ć¦ć€č”Øē¤ŗćƒ¢ćƒ¼ćƒ‰ć‚„ćƒ„ćƒ¼ćƒ«ć‚’åˆ‡ć‚Šę›æćˆć‚‹ć“ćØć§ć€ć‚ˆć‚Šä½æć„ć‚„ć™ććŖć‚Šć¾ć™ć€‚


    🌸 ć²ć‚‰ćŒćŖļ¼ˆå…Ø8ćƒšćƒ¼ć‚øļ¼‰

    ć„ććŖć‚Šé›£ć—ć„ę–‡å­—ć‹ć‚‰ę›øć‹ć›ć¾ć›ć‚“ļ¼
    ē­†é‹ć³ć®é›£ę˜“åŗ¦é †ć«ć‚¹ćƒ¢ćƒ¼ćƒ«ć‚¹ćƒ†ćƒƒćƒ—ć§é€²ćæć¾ć™ć€‚

    ē”»åƒ


    • Step 1ļ¼ˆč¶…å…„é–€ļ¼‰ļ¼š
      1ē”»ć§ć‚¹ćƒƒćØę›øć‘ć‚‹ć‚·ćƒ³ćƒ—ćƒ«ćŖē·šć€‚
      ć€ć—ćƒ»ć¤ćƒ»ććƒ»ćøć€‘

    • Step 2ļ¼ˆåˆē“šļ¼‰ļ¼š
      å˜ē“”ćŖć‚«ćƒ¼ćƒ–ćØ2画の文字。
      ć€ć®ćƒ»ć¦ćƒ»ćØćƒ»ć„ćƒ»ć“ćƒ»ć‚Šćƒ»ć²ć€‘

    • Step 3ļ¼ˆäø­ē“šļ¼‰ļ¼š
      ęŠ˜ć‚Ščæ”ć—ć‚„ę³¢ę‰“ć”ć®å‹•ćć‚’ē·“ēæ’ć€‚
      ć€ć†ćƒ»ćˆćƒ»ććƒ»ć‚„ćƒ»ć‚†ćƒ»ć‚ˆćƒ»ć‚‹ćƒ»ć‚ćƒ»ć‚“ć€‘

    • Step 4ļ¼ˆäøŠē“šļ¼‰ļ¼š
      ē·šć®äŗ¤å·®ć‚„å…Øä½“ć®ćƒćƒ©ćƒ³ć‚¹ćŒę±‚ć‚ć‚‰ć‚Œć‚‹ę–‡å­—ć€‚
      ć€ć‹ćƒ»ććƒ»ć‘ćƒ»ć•ćƒ»ć›ćƒ»ćŸćƒ»ć”ćƒ»ć«ćƒ»ćµćƒ»ć‚‚ćƒ»ć‚‰ćƒ»ć‚ćƒ»ć‚’ć€‘

    • Step 5ļ¼ˆęœ€é›£é–¢ļ¼‰ļ¼š
      ćƒšćƒ³å­—ć§ęœ€ć‚‚ć¤ć¾ć„ćć‚„ć™ć„ć€ćć‚‹ć£ćØå›žć‚‹ć€Œēµć³ć€ćŒć‚ć‚‹ę–‡å­—ć«ęŒ‘ęˆ¦ļ¼
      ć€ć‚ćƒ»ćŠćƒ»ć™ćƒ»ćŖćƒ»ć¬ćƒ»ć­ćƒ»ćÆćƒ»ć»ćƒ»ć¾ćƒ»ćæćƒ»ć‚€ćƒ»ć‚ćƒ»ć‚Œć€‘

    • Step 6惻7:
      ē·ä»•äøŠć’ćØć—ć¦ć€ć€Œēø¦ę›øćć€ć€ŒęØŖę›øćć€
      ćć‚Œćžć‚Œć®äŗ”åéŸ³č”Øć‚’å®Œå‚™ć—ć¦ć„ć¾ć™ć€‚




    ✨ ć‚«ć‚æć‚«ćƒŠļ¼ˆå…Ø8ćƒšćƒ¼ć‚øļ¼‰

    ć‚«ć‚æć‚«ćƒŠē‰¹ęœ‰ć®ć€Œē›“ē·šć€ćØć€Œč§’åŗ¦ć€ć‚’ę„č­˜ć—ćŸć‚«ćƒŖć‚­ćƒ„ćƒ©ćƒ ć§ć™ć€‚

    ē”»åƒ
    • Step 1ļ¼ˆč¶…å…„é–€ļ¼‰ļ¼š
      ć‚·ćƒ³ćƒ—ćƒ«ćŖē›“ē·šćØę‰•ć„ć€‚
      ć€ć‚¤ćƒ»ćƒŽćƒ»ćƒćƒ»ćƒ˜ćƒ»ćƒˆćƒ»ćƒ‹ćƒ»ćƒ•ć€‘

    • Step 2ļ¼ˆåˆē“šļ¼‰ļ¼š
      å‘ććØč§’åŗ¦ćŒå‘½ć«ćŖć‚‹ć€é–“é•ć„ć‚„ć™ć„ę–‡å­—ć‚’ćƒžć‚¹ć‚æćƒ¼ć€‚
      ć€ć‚·ćƒ»ćƒ„ćƒ»ć‚½ćƒ»ćƒ³ćƒ»ćƒ ćƒ»ćƒ¤ćƒ»ć‚Æć€‘

    • Step 3ļ¼ˆäø­ē“šļ¼‰ļ¼š
      ęŠ˜ć‚Œć€ć‚«ćƒ‰ć‚’å­¦ć¶ę–‡å­—ć€‚
      ć€ć‚¢ćƒ»ć‚«ćƒ»ć‚³ćƒ»ć‚µćƒ»ć‚»ćƒ»ć‚æćƒ»ćƒ†ćƒ»ćƒŠćƒ»ćƒćƒ»ćƒ©ćƒ»ćƒ­ć€‘

    • Step 4ļ¼ˆäøŠē“šļ¼‰ļ¼š
      äŗ¤å·®ć™ć‚‹ē·šć®ćƒćƒ©ćƒ³ć‚¹ć‚’å­¦ć³ć¾ć™ć€‚
      ć€ćƒžćƒ»ćƒ”ćƒ»ć‚­ćƒ»ć‚±ćƒ»ćƒćƒ»ćƒŒćƒ»ć‚¹ćƒ»ćƒ›ćƒ»ćƒ¢ćƒ»ćƒØćƒ»ćƒ«ćƒ»ćƒÆć€‘

    • Step 5ļ¼ˆęœ€é›£é–¢ļ¼‰ļ¼š
      ē©ŗé–“ć®å–ć‚Šę–¹ćŒé›£ć—ć„ę–‡å­—ć§ä»•äøŠć’ć¾ć™ć€‚
      ć€ć‚¦ćƒ»ć‚Øćƒ»ć‚Ŗćƒ»ćƒ’ćƒ»ćƒŸćƒ»ćƒ¦ćƒ»ćƒŖćƒ»ćƒ¬ćƒ»ćƒ²ć€‘

    • Step 6惻7:
      ć²ć‚‰ćŒćŖåŒę§˜ć€ēø¦ę›øććƒ»ęØŖę›øćć®äŗ”åéŸ³č”Øć‚’å®Œå‚™ć€‚



    šŸ”¤ ćƒ­ćƒ¼ćƒžå­—ćƒ»ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆļ¼ˆå…Ø10ćƒšćƒ¼ć‚øļ¼‰

    åŸŗē¤Žć‹ć‚‰å®Ÿč·µēš„ćŖč”ØčØ˜ćƒ«ćƒ¼ćƒ«ć®é•ć„ć¾ć§ć€
    ć“ć‚Œäø€ć¤ć§å®Œē’§ć«ē¶²ē¾…ć§ćć¾ć™ļ¼

    ē”»åƒ
    • Step 1怜2:
      ć¾ćšćÆč‹±čŖžć®åŸŗęœ¬ć€Œå¤§ę–‡å­—(A怜Z)ć€ć€Œå°ę–‡å­—(a怜z)ć€ć‚’ē·“ēæ’ć€‚

    • Step 3怜4:
      ć€Œć‚č”Œć€œć‚č”Œć€ć®åŸŗęœ¬ćƒ­ćƒ¼ćƒžå­—ć€‚

    • Step 5:
      ć€ŒćŒć€œć±č”Œć€ć®ęæéŸ³ćƒ»åŠęæéŸ³ć€‚

    • Step 6怜8:
      ć€Œćć‚ƒćƒ»ć²ć‚ƒćƒ»ćŽć‚ƒć€ćŖć©ć®ę‹—éŸ³ļ¼ˆć‚ˆć†ćŠć‚“ļ¼‰ć‚’å¾¹åŗ•ē·“ēæ’ć€‚

    • Step 9怜10ļ¼ˆč¶…å®Ÿč·µē·Øļ¼ļ¼‰ļ¼š
      ć“ć“ćŒęœ€å¤§ć®ćƒć‚¤ćƒ³ćƒˆļ¼
      ć€Œćƒ˜ćƒœćƒ³å¼ć€ćØć€ŒčØ“ä»¤å¼ć€ć®é•ć„ć‚’ęÆ”č¼ƒćƒ»č§£čŖ¬ć—ćŖćŒć‚‰ē·“ēæ’ć§ćć¾ć™ć€‚

      • ćƒ˜ćƒœćƒ³å¼ļ¼ˆSHI, CHI, TSU, FUļ¼‰ļ¼š
        č‹±čŖžč©±č€…ćŒē™ŗéŸ³ć—ć‚„ć™ćć€
        ćƒ‘ć‚¹ćƒćƒ¼ćƒˆć‚„é§…åćƒ»é“č·ÆęØ™č­˜ć§ä½æć‚ć‚Œć‚‹å®Ÿē”Øēš„ćŖę›øćę–¹ć€‚

      • čØ“ä»¤å¼ļ¼ˆSI, TI, TU, HUļ¼‰ļ¼š
        äŗ”åéŸ³č”Øć®č¦å‰‡ć«ę²æć£ć¦ćŠć‚Šć€
        ę—„ęœ¬ć®å°å­¦ę ”ć®ęŽˆę„­ć§ēæ’ć†ć“ćØćŒå¤šć„ę›øćę–¹ć€‚

      • ć€Œćµć€ć‚„ć€Œć—ć‚ƒć€ć€Œć”ć‚ƒć€ćŖć©ć€
        ē‰¹ć«é–“é•ćˆć‚„ć™ć„ę³Øę„ē‚¹ć‚‚
        čµ¤č‰²ćØé’č‰²ć§ć‚ć‹ć‚Šć‚„ć™ććƒć‚¤ćƒ©ć‚¤ćƒˆč§£čŖ¬ć—ć¦ć„ć¾ć™ć€‚



    šŸ”¢ ę•°å­—ćƒ»ę¼¢ę•°å­—ļ¼ˆå…Ø2ćƒšćƒ¼ć‚øļ¼‰

    ē”»åƒ
    • Step 1:
      ę—„åøøć§ęœ€ć‚‚ä½æć†ć€Œē®—ē”Øę•°å­—ļ¼ˆ0怜9ļ¼‰ć€

    • Step 2:
      ć€Œę¼¢ę•°å­—ļ¼ˆäø€ć€œäø‡ć€ć€‡ć€å††ļ¼‰ć€
      ę¼¢ę•°å­—ć®ćƒžć‚¹ć«ćÆć€Œć„ć”ć€ć€Œ1000ć€ćŖć©ć®
      čŖ­ćæę–¹ļ¼ˆćƒ«ćƒ“ļ¼‰ćØć‚¢ćƒ©ćƒ“ć‚¢ę•°å­—ćŒč£œåŠ©ćØć—ć¦č”Øē¤ŗć•ć‚Œć‚‹ćŸć‚ć€
      ę—„ęœ¬čŖžć‚’å‹‰å¼·äø­ć®å¤–å›½äŗŗć®ę–¹ć«ć‚‚ćØć¦ć‚‚č¦Ŗåˆ‡ćŖčØ­čØˆć«ćŖć£ć¦ć„ć¾ć™ć€‚


    ā€»å› ćæć«ć€ć™ć¹ć¦ć®ćƒ¢ćƒ¼ćƒ‰ć§ć€č‹±čŖžć«čØ€čŖžć‚’åˆ‡ć‚Šę›æćˆć§ćć¾ć™ļ¼
    čØ€čŖžåˆ‡ć‚Šę›æćˆćƒœć‚æćƒ³ćÆć€éŸ³å£°ćƒœć‚æćƒ³ć®å³ć§ć™ļ¼

    ē”»åƒ
    ē”»åƒ


    šŸ’•ć‚¹ćƒ©ć‚¤ćƒ‰č§£čŖ¬

    å‰µä½œå¤§č³ž2026ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ć€å®Œå…Øē„”ę–™ćƒ»ē„žć‚¢ćƒ—ćƒŖć€‘å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖšŸ“±iPadćƒ»ć‚¹ćƒžćƒ›ćƒ»PCć§ćƒšćƒ³å­—ē·“ēæ’šŸ–Š #ē¾Žę–‡å­— #ć‚¢ćƒ—ćƒŖ #ai #Gemini #canvas
Koroć”ć‚ƒć‚“ā™„å…Žč€³ć‚³ćƒ­

 Creative Award 2026怐100% FREE怑AI Handwriting Practice App for iPad, Phone & PC āœļøJapanese
    Creative Award 2026 All Category怐100% FREE怑
    AI Handwriting Practice App for iPad, Phone & PC āœļø


    ć€ŒčŖ°ć‚‚ćŒč”Øē¾ć§ćć‚‹ęœŖę„ćøć€ćØć„ć†ćƒ”ćƒƒć‚»ćƒ¼ć‚øć‚’ęŽ²ć’ćŸć‚æć‚¤ćƒˆćƒ«ć‚¹ćƒ©ć‚¤ćƒ‰ć€‚ä½™ē™½ć‚’ćŸć£ć·ć‚ŠćØę“»ć‹ć—ćŸę“—ē·“ć•ć‚ŒćŸćƒ‡ć‚¶ć‚¤ćƒ³ć§ć€é•ć„ć«ć‚ˆć£ć¦åÆčƒ½ę€§ćŒé–‰ć–ć•ć‚ŒćŖć„ęœŖę„ćøć®é”˜ć„ć‚’č”Øē¾ć—ć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 1ļ¼ščŖ°ć‚‚ćŒč”Øē¾ć§ćć‚‹ęœŖę„ćø

    ć‚‚ć—ć€ä¼ćˆćŸć„ć“ćØćŒć‚ć‚‹ć®ć«ä¼ćˆć‚‰ć‚ŒćŖć„äŗŗćŒć„ć‚‹ćØć—ćŸć‚‰ć€‚
    ć‚‚ć—ć€å­¦ć³ćŸć„ę°—ęŒć”ćŒć‚ć‚‹ć®ć«ć€ćć®ę©Ÿä¼šć‚’ååˆ†ć«å¾—ć‚‰ć‚ŒćŖć„äŗŗćŒć„ć‚‹ćØć—ćŸć‚‰ć€‚
    ē§ćŸć”ćÆć€ćć®ē¾å®Ÿć«å‘ćåˆć„ć¾ć—ćŸć€‚
    ä»Šę—„ćŠč©±ć—ć™ć‚‹ć®ćÆć€å˜ćŖć‚‹ć‚¢ćƒ—ćƒŖć®č©±ć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    äø€äŗŗć²ćØć‚Šć®åÆčƒ½ę€§ćŒć€é•ć„ć«ć‚ˆć£ć¦é–‰ć–ć•ć‚ŒćŖć„ęœŖę„ć®č©±ć§ć™ć€‚
    å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖćÆć€ćć®ęœŖę„ćøå‘ć‹ć†å°ć•ćŖäø€ę­©ćØć—ć¦ē”Ÿć¾ć‚Œć¾ć—ćŸć€‚


    ć€Œå¤±ć‚ć‚Œć¦ć„ćŸåÆčƒ½ę€§ć€ć‚’ćƒ†ćƒ¼ćƒžć«ć€å·¦åˆ©ćć‚„å­¦ēæ’ē’°å¢ƒć®é•ć„ćØć„ć£ćŸč¦‹ćˆć«ćć„å›°é›£ć«ē„¦ē‚¹ć‚’å½“ć¦ć¦ć„ć¾ć™ć€‚č½ć”ē€ć„ćŸćƒˆćƒ¼ćƒ³ć®ćƒŸćƒ‹ćƒžćƒ«ćŖę§‹ęˆć§ć€äŗŗć§ćÆćŖćē’°å¢ƒć‚’å¤‰ćˆć‚‹ć¹ćć ćØć„ć†å•ć„ć‹ć‘ć‚’ä¼ćˆć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 2ļ¼šå¤±ć‚ć‚Œć¦ć„ćŸåÆčƒ½ę€§

    äø–ć®äø­ć«ćÆć€č¦‹ćˆć«ćć„å›°é›£ćŒę•°å¤šćå­˜åœØć—ć¦ć„ć¾ć™ć€‚
    å·¦åˆ©ćć§ć‚ć‚‹ć“ćØć€‚
    čØ€č‘‰ć‚„ę–‡åŒ–ć®é•ć„ćŒć‚ć‚‹ć“ćØć€‚
    čŗ«ä½“ę©Ÿčƒ½ć‚„å­¦ēæ’ē’°å¢ƒć«é•ć„ćŒć‚ć‚‹ć“ćØć€‚
    ćć®ć©ć‚Œć‚‚ćŒć€ęœ¬ę„ć®čƒ½åŠ›ćØćÆē„”é–¢äæ‚ć§ć™ć€‚
    ćć‚ŒćŖć®ć«ć€å¤šćć®äŗŗćŒęŒ‘ęˆ¦ć™ć‚‹å‰ć«å£ć«ć¶ć¤ć‹ć£ć¦ć„ć¾ć™ć€‚
    ē§ćŸć”ćÆć€å•ć„ć‹ć‘ć¾ć—ćŸć€‚
    ęœ¬å½“ć«å¤‰ćˆć‚‹ć¹ććŖć®ćÆć€äŗŗć§ćÆćŖćē’°å¢ƒć§ćÆćŖć„ć§ć—ć‚‡ć†ć‹ć€‚


    ć€Œē§ćŸć”ć®ē­”ćˆć€ćØć—ć¦ć€AIć®åŠ›ć§å€‹ę€§ć‚’å¼•ćå‡ŗć™ćƒ„ćƒ¼ćƒ«ć€ŒInclusive AI Writing Canvasć€ć®ć‚³ćƒ³ć‚»ćƒ—ćƒˆć‚’ęć„ć¦ć„ć¾ć™ć€‚čŖ°ć‚‚å–ć‚Šę®‹ć•ć‚ŒćŖć„å­¦ēæ’ä½“éØ“ć‚’ē›®ęŒ‡ć™ćƒ—ćƒ­ć‚»ć‚¹ćŒć€ć‚·ćƒ³ćƒ—ćƒ«ćŖå›³č§£ć§ē¤ŗć•ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 3ļ¼šē§ćŸć”ć®ē­”ćˆ

    ćć®å•ć„ćøć®ē­”ćˆćØć—ć¦ē”Ÿć¾ć‚ŒćŸć®ćŒć€Inclusive AI Writing Canvas恧恙怂
    AIć®åŠ›ć‚’ä½æć†ćŸć‚ć®ćƒ„ćƒ¼ćƒ«ć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    äŗŗć®åŠ›ć‚’å¼•ćå‡ŗć™ćŸć‚ć«ć€AIć‚’ä½æć†ćƒ„ćƒ¼ćƒ«ć§ć™ć€‚
    äø€äŗŗć²ćØć‚Šć®é•ć„ć‚’å¼±ćæćØć—ć¦ę‰±ć†ć®ć§ćÆćŖćć€å€‹ę€§ćØć—ć¦å—ć‘å…„ć‚Œć‚‹ć€‚
    ćć‚“ćŖå­¦ć³ć®å “ę‰€ć‚’ć€ćƒ‡ć‚øć‚æćƒ«ć®åŠ›ć§å®Ÿē¾ć—ćŸć„ćØč€ƒćˆć¾ć—ćŸć€‚
    ē§ćŸć”ćŒē›®ęŒ‡ć™ć®ćÆć€čŖ°ć‚‚å–ć‚Šę®‹ć•ć‚ŒćŖć„å­¦ēæ’ä½“éØ“ć§ć™ć€‚


    ē“™ć«ę›øćć‚ˆć†ćŖęø©ć‹ć•ćØć€ćƒ‡ć‚øć‚æćƒ«ć®åˆ©ä¾æę€§ćŒčžåˆć™ć‚‹č‡Ŗē„¶ćŖå­¦ć³ć®ęµć‚Œć‚’ęć„ć¦ć„ć¾ć™ć€‚ćƒ†ć‚ÆćƒŽćƒ­ć‚øćƒ¼ć®é€²åŒ–ć®äø­ć§ć‚‚äŗŗé–“ć‚‰ć—ć•ć‚’å¤§åˆ‡ć«ć™ć‚‹å§æå‹¢ćŒć€ęŸ”ć‚‰ć‹ćŖćƒ“ć‚øćƒ„ć‚¢ćƒ«ć§č”Øē¾ć•ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 4ļ¼šćƒ‡ć‚øć‚æćƒ«ćØäŗŗé–“ć‚‰ć—ć•ć®čžåˆ

    ćƒ†ć‚ÆćƒŽćƒ­ć‚øćƒ¼ćŒé€²åŒ–ć™ć‚‹ć»ć©ć€ē§ćŸć”ćÆäŗŗé–“ć‚‰ć—ć•ć‚’å¤§åˆ‡ć«ć—ćŸć„ćØč€ƒćˆć¦ć„ć¾ć™ć€‚
    ć ć‹ć‚‰ć“ć®ć‚¢ćƒ—ćƒŖćÆć€ē“™ć«ę›øćęø©ć‹ć•ć‚’ę®‹ć—ć¾ć—ćŸć€‚
    ę€ć„ć¤ć„ćŸć“ćØć‚’č‡Ŗē”±ć«ę›øćć€‚
    試してみる。
    間違恈悋怂
    ćć—ć¦ć¾ćŸęŒ‘ęˆ¦ć™ć‚‹ć€‚
    ćć®č‡Ŗē„¶ćŖå­¦ć³ć®ęµć‚Œć‚’å£Šć•ćŖć„ć“ćØć‚’ć€ä½•ć‚ˆć‚Šć‚‚å¤§åˆ‡ć«ć—ć¦ć„ć¾ć™ć€‚


    å·¦åˆ©ćć®ę–¹ć‚’å«ć‚ć€ć‚ć‚‰ć‚†ć‚‹äŗŗćŒęˆ‘ę…¢ć›ćšć«ä½æćˆć‚‹ćƒ‡ć‚¶ć‚¤ćƒ³ć®é‡č¦ę€§ć‚’ä¼ćˆć¦ć„ć¾ć™ć€‚ē„”ę„č­˜ć®å‰ęć‚’å–ć‚Šę‰•ć„ć€čŖ°ć‹ć®ęŒ‘ęˆ¦ć‚’ę”Æćˆć‚‹UIčØ­čØˆć®ä¾”å€¤ćŒć™ć£ćć‚ŠćØć¾ćØć‚ć‚‰ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 5ļ¼šćŸć£ćŸäø€ć¤ć®é…ę…®ćŒäŗŗē”Ÿć‚’å¤‰ćˆć‚‹

    å¤šćć®äŗŗć«ćØć£ć¦å½“ćŸć‚Šå‰ć®ę“ä½œć‚‚ć€čŖ°ć‹ć«ćØć£ć¦ćÆä½æć„ć„ć‚‰ć•ć®åŽŸå› ć«ćŖć‚Šć¾ć™ć€‚
    ä¾‹ćˆć°ć€å·¦åˆ©ćć®ę–¹ć§ć™ć€‚
    äø–ć®äø­ć®å¤šćć®ć‚µćƒ¼ćƒ“ć‚¹ćÆć€ē„”ę„č­˜ć®ć†ć”ć«å³åˆ©ćć‚’å‰ęćØć—ć¦čØ­čØˆć•ć‚Œć¦ć„ć¾ć™ć€‚
    ć—ć‹ć—ć€ē§ćŸć”ćÆč€ƒćˆć¾ć—ćŸć€‚
    čŖ°ć‹ćŒęˆ‘ę…¢ć™ć‚‹å‰ęć®ćƒ‡ć‚¶ć‚¤ćƒ³ćÆć€ęœ¬å½“ć«ę­£ć—ć„ć®ć§ć—ć‚‡ć†ć‹ć€‚
    ć‚ćšć‹ćŖé…ę…®ć‹ć‚‚ć—ć‚Œć¾ć›ć‚“ć€‚
    ć‘ć‚Œć©ć€ćć®é…ę…®ćŒčŖ°ć‹ć®ęŒ‘ęˆ¦ć‚’ę”Æćˆć‚‹åŠ›ć«ćŖć‚‹ć®ć§ć™ć€‚


    ć€ŒčØ˜éŒ²ćÆåøŒęœ›ć«ćŖć‚‹ć€ćØć„ć†ćƒ”ćƒƒć‚»ćƒ¼ć‚øćØćØć‚‚ć«ć€ęˆęžœć‚’äæå­˜ć—ęŒÆć‚Ščæ”ć‚‹ę©Ÿčƒ½ć«ć¤ć„ć¦ē“¹ä»‹ć—ć¦ć„ć¾ć™ć€‚éŽåŽ»ć®č‡Ŗåˆ†ć‚’č¦‹ć¦å‰ćøé€²ć‚€å‹‡ę°—ć‚’å¾—ć‚‹ćØć„ć†ęø©ć‹ć„ć‚³ćƒ³ć‚»ćƒ—ćƒˆćŒć€ę“—ē·“ć•ć‚ŒćŸćƒ¬ć‚¤ć‚¢ć‚¦ćƒˆć§ęć‹ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 6ļ¼ščØ˜éŒ²ćÆåøŒęœ›ć«ćŖć‚‹

    å­¦ć³ćÆć€ćć®ēž¬é–“ć ć‘ć®ć‚‚ć®ć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    ä»Šę—„ć§ććŖć‹ć£ćŸć“ćØćŒć€ę˜Žę—„ć§ćć‚‹ć‚ˆć†ć«ćŖć‚‹ć€‚
    ćć®ęˆé•·ć‚’č¦‹å±Šć‘ć‚‹ćŸć‚ć«ćÆć€čØ˜éŒ²ćŒåæ…č¦ć§ć™ć€‚
    ć“ć®ć‚¢ćƒ—ćƒŖć§ćÆć€ęˆęžœć‚’äæå­˜ć—ć€ęŒÆć‚Ščæ”ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚
    éŽåŽ»ć®č‡Ŗåˆ†ć‚’č¦‹ć‚‹ć“ćØć§ć€äŗŗćÆå‰ćøé€²ć‚€å‹‡ę°—ć‚’å¾—ć‚‰ć‚Œć¾ć™ć€‚
    čØ˜éŒ²ćÆć€å˜ćŖć‚‹ćƒ‡ćƒ¼ć‚æć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    ęœŖę„ćøć®åøŒęœ›ć§ć™ć€‚


    ć€Œę›øććƒ»ē›“ć™ćƒ»äæå­˜ć™ć‚‹ć€ćØć„ć†ē›“ę„Ÿēš„ćŖę“ä½œćƒ•ćƒ­ćƒ¼ć‚’ć€ē„”é§„ć®ćŖć„ć‚·ćƒ³ćƒ—ćƒ«ćŖć‚¢ć‚¤ć‚³ćƒ³ć§å›³č§£ć—ć¦ć„ć¾ć™ć€‚é›£ć—ć„ę“ä½œć‚’č¦šćˆć‚‹ć®ć§ćÆćŖćć€č‡Ŗåˆ†ć‚‰ć—ćč”Øē¾ć™ć‚‹ćŸć‚ć®ćƒ‡ć‚¶ć‚¤ćƒ³ć§ć‚ć‚‹ć“ćØćŒä¼ć‚ć‚Šć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 7ļ¼šęŒ‘ęˆ¦ć‚’ē°”å˜ć«ć™ć‚‹

    ę–°ć—ć„ć“ćØć‚’å§‹ć‚ć‚‹ćØćć€äŗŗćÆäøå®‰ć‚’ę„Ÿć˜ć¾ć™ć€‚
    ć ć‹ć‚‰ē§ćŸć”ćÆć€ę“ä½œć‚’ć§ćć‚‹é™ć‚Šć‚·ćƒ³ćƒ—ćƒ«ć«ć—ć¾ć—ćŸć€‚
    ę›øćć€‚
    盓す。
    äæå­˜ć™ć‚‹ć€‚
    恝悌恠恑恧恙怂
    é›£ć—ć„ę“ä½œć‚’č¦šćˆć‚‹ćŸć‚ć§ćÆćŖćć€č‡Ŗåˆ†ć‚‰ć—ćč”Øē¾ć™ć‚‹ćŸć‚ć«ę™‚é–“ć‚’ä½æć£ć¦ć»ć—ć„ć€‚
    ćć®ęƒ³ć„ć‚’ć€ć“ć®čØ­čØˆć«č¾¼ć‚ć¦ć„ć¾ć™ć€‚


    ę–‡å­—ćØéŸ³ć‚’ēµć³ć¤ć‘ć€ē™ŗéŸ³ć‚„čŖ­ćæę–¹ć®ē†č§£ć‚’ę”Æćˆć‚‹ę©Ÿčƒ½ć‚’čŖ¬ę˜Žć—ć¦ć„ć¾ć™ć€‚čØ€č‘‰ć®é•ć„ć«ć‚ˆć‚‹å£ć‚’ćŖćć—ć€å­¦ć¶å–œć³ć‚’å±Šć‘ć‚‹ćØć„ć†ęƒ³ć„ćŒć€ć‚ÆćƒŖć‚¢ćŖćƒ“ć‚øćƒ„ć‚¢ćƒ«ć§č”Øē¾ć•ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 8ļ¼ščØ€č‘‰ć®å£ć‚’č¶Šćˆć‚‹

    čØ€č‘‰ćÆć€äŗŗćØäŗŗć‚’ć¤ćŖćåŠ›ć§ć™ć€‚
    ć—ć‹ć—ć€ćØććØć—ć¦čØ€č‘‰ćÆå£ć«ć‚‚ćŖć‚Šć¾ć™ć€‚
    ē™ŗéŸ³ćŒåˆ†ć‹ć‚‰ćŖć„ć€‚
    čŖ­ćæę–¹ćŒåˆ†ć‹ć‚‰ćŖć„ć€‚
    だから、自俔を失ってしまう。
    ćć‚“ćŖēž¬é–“ć‚’ć€å°‘ć—ć§ć‚‚ęø›ć‚‰ć—ćŸć„ć€‚
    ę–‡å­—ćØéŸ³ć‚’ēµć³ä»˜ć‘ć€ē†č§£ć‚’ę”Æćˆć‚‹ć“ćØć§ć€ē§ćŸć”ćÆå­¦ć¶å–œć³ć‚’å±Šć‘ćŸć„ćØč€ƒćˆć¦ć„ć¾ć™ć€‚


    ę•°å­—ćŖć©ć®č”Øē¾ć‚’č¦‹ęÆ”ć¹ćŖćŒć‚‰å­¦ć¹ć‚‹ē’°å¢ƒć‚’ć€č¦–č¦šēš„ć«ć‚ć‹ć‚Šć‚„ć™ćę•“ē†ć—ć¦ć„ć¾ć™ć€‚ć€Œåˆ†ć‹ć£ćŸć€ćØć„ć†ęˆåŠŸä½“éØ“ćŒę¬”ć®ęŒ‘ęˆ¦ćøć¤ćŖćŒć‚‹ę§˜å­ć‚’ć€åœ§čæ«ę„Ÿć®ćŖć„ćƒ‡ć‚¶ć‚¤ćƒ³ć§ē¤ŗć—ć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 9ļ¼šē†č§£ć®ēž¬é–“ć‚’å¢—ć‚„ć™

    å­¦ć³ć®äø­ć«ćÆć€ęœ€ć‚‚ē¾Žć—ć„ēž¬é–“ćŒć‚ć‚Šć¾ć™ć€‚
    ćć‚ŒćÆć€åˆ†ć‹ć‚‰ćŖć‹ć£ćŸć“ćØćŒåˆ†ć‹ć£ćŸēž¬é–“ć§ć™ć€‚
    ę•°å­—ć®č”Øē¾äø€ć¤ć‚’å–ć£ć¦ć‚‚ć€äŗŗć«ć‚ˆć£ć¦ē†č§£ć—ć‚„ć™ć„å½¢ćÆē•°ćŖć‚Šć¾ć™ć€‚
    ć ć‹ć‚‰ē§ćŸć”ćÆć€å¤šę§˜ćŖč”Øē¾ć‚’č¦‹ęÆ”ć¹ćŖćŒć‚‰å­¦ć¹ć‚‹ē’°å¢ƒć‚’ē”Øę„ć—ć¾ć—ćŸć€‚
    ē†č§£ć§ććŸćØć„ć†ęˆåŠŸä½“éØ“ćŒć€äŗŗć‚’ę¬”ć®ęŒ‘ęˆ¦ćøå°Žć„ć¦ćć‚Œć‚‹ć‹ć‚‰ć§ć™ć€‚


    ę›øćć€č©±ć™ć€ęććŖć©ć€äŗŗćć‚Œćžć‚Œå¾—ę„ćŖę–¹ę³•ć§å…„åŠ›ć§ćć‚‹ć‚¤ćƒ³ć‚Æćƒ«ćƒ¼ć‚·ćƒ–ćŖć‚¢ćƒ—ćƒ­ćƒ¼ćƒć‚’ęć„ć¦ć„ć¾ć™ć€‚ćƒ„ćƒ¼ćƒ«ćŒäŗŗć«åˆć‚ć›ć‚‹ćØć„ć†ē†åæµćŒć€ęŸ”č»Ÿć•ć‚’ę„Ÿć˜ć‚‹ćƒ¬ć‚¤ć‚¢ć‚¦ćƒˆć§ć¾ćØć‚ć‚‰ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 10ļ¼šäø€äŗŗć²ćØć‚Šć«åˆć£ćŸč”Øē¾ę–¹ę³•

    äŗŗćć‚Œćžć‚Œć€å¾—ę„ćŖć“ćØćÆé•ć„ć¾ć™ć€‚
    ę–‡å­—ć‚’ę›øćć“ćØćŒå¾—ę„ćŖäŗŗć€‚
    č©±ć—ć¦ä¼ćˆć‚‹ć“ćØćŒå¾—ę„ćŖäŗŗć€‚
    ēµµć‚„å›³ć§č€ƒćˆć‚‹ć“ćØćŒå¾—ę„ćŖäŗŗć€‚
    ć ć‹ć‚‰ć€å…„åŠ›ę–¹ę³•ć‚‚äø€ć¤ć«é™å®šć—ć¾ć›ć‚“ć§ć—ćŸć€‚
    äŗŗćŒćƒ„ćƒ¼ćƒ«ć«åˆć‚ć›ć‚‹ć®ć§ćÆćŖćć€ćƒ„ćƒ¼ćƒ«ćŒäŗŗć«åˆć‚ć›ć‚‹ć€‚
    ćć‚Œć“ććŒć€ęœ¬å½“ć®ć‚¤ćƒ³ć‚Æćƒ«ćƒ¼ć‚·ćƒ–ćƒ‡ć‚¶ć‚¤ćƒ³ć ćØč€ƒćˆć¦ć„ć¾ć™ć€‚


    č¦‹ćˆćŖć„å “ę‰€ć§ę”Æćˆć‚‹č¤‡é›‘ćŖć‚·ć‚¹ćƒ†ćƒ ę§‹ęˆć‚’ć€ć‚¹ćƒžćƒ¼ćƒˆćŖå›³č§£ć§č”Øē¾ć—ć¦ć„ć¾ć™ć€‚é«˜åŗ¦ćŖęŠ€č”“ćŒč£ę–¹ćØć—ć¦é™ć‹ć«äŗŗć‚’ę”Æćˆć‚‹ćØć„ć†ć€ę“—ē·“ć•ć‚ŒćŸčØ­čØˆę€ęƒ³ćŒä¼ć‚ć‚Šć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 11ļ¼šč¦‹ćˆćŖć„å “ę‰€ć§ę”Æćˆć‚‹ęŠ€č”“

    ć©ć‚Œć»ć©å„Ŗć—ć„ä½“éØ“ć‚‚ć€ćć‚Œć‚’ę”Æćˆć‚‹ęŠ€č”“ćŒćŖć‘ć‚Œć°å®Ÿē¾ć§ćć¾ć›ć‚“ć€‚
    ć“ć®ć‚·ć‚¹ćƒ†ćƒ ć«ćÆć€å¤šćć®å·„å¤«ćØęŠ€č”“ćŒč©°ć‚č¾¼ć¾ć‚Œć¦ć„ć¾ć™ć€‚
    ć—ć‹ć—ć€åˆ©ē”Øč€…ć«č¤‡é›‘ć•ć‚’ę„Ÿć˜ć•ć›ć¦ćÆć„ć‘ć¾ć›ć‚“ć€‚
    ē§ćŸć”ćŒē›®ęŒ‡ć—ćŸć®ćÆć€é«˜åŗ¦ćŖęŠ€č”“ćŒé™ć‹ć«äŗŗć‚’ę”Æćˆć‚‹äø–ē•Œć§ć™ć€‚
    äø»å½¹ćÆć‚·ć‚¹ćƒ†ćƒ ć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    åˆ©ē”Øć™ć‚‹äø€äŗŗć²ćØć‚Šć§ć™ć€‚


    ę—„ć€…ć®ē·“ēæ’ć‚„äøŠé”ć®č»Œč·”ć‚’ć—ć£ć‹ć‚Šäæå­˜ć—ć€ęŒÆć‚Ščæ”ć‚‹ćŸć‚ć®ä»•ēµ„ćæć‚’ęć„ć¦ć„ć¾ć™ć€‚č¦‹ćˆć«ćć„äŗŗć®ęˆé•·ć‚’åÆč¦–åŒ–ć—ć€ęœŖę„ć®č²”ē”£ćØć—ć¦ę®‹ć™ćØć„ć†ęø©ć‹ć„ćƒ”ćƒƒć‚»ćƒ¼ć‚øćŒč¾¼ć‚ć‚‰ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 12ļ¼šåŠŖåŠ›ć‚’ęœŖę„ćøę®‹ć™

    čŖ°ć‹ćŒäø€ē”Ÿę‡øå‘½ę›øć„ćŸę–‡å­—ć€‚
    ē¹°ć‚Ščæ”ć—ē·“ēæ’ć—ćŸčØ˜éŒ²ć€‚
    å°‘ć—ćšć¤äøŠé”ć—ćŸč»Œč·”ć€‚
    ćć‚Œć‚‰ćÆć™ć¹ć¦ć€ćć®äŗŗć ć‘ć®č²”ē”£ć§ć™ć€‚
    ć ć‹ć‚‰ē§ćŸć”ćÆć€ćć®åŠŖåŠ›ć‚’ć—ć£ć‹ć‚Šę®‹ć›ć‚‹ä»•ēµ„ćæć‚’ä½œć‚Šć¾ć—ćŸć€‚
    äŗŗć®ęˆé•·ćÆč¦‹ćˆć«ćć„ć‚‚ć®ć§ć™ć€‚
    ć ć‹ć‚‰ć“ćć€ę®‹ć—ć€ęŒÆć‚Ščæ”ć‚Šć€å®Ÿę„Ÿć§ćć‚‹ć“ćØćŒå¤§åˆ‡ćŖć®ć§ć™ć€‚


    ć©ć‚“ćŖē’°å¢ƒć§ć‚‚å®‰åæƒć—ć¦ä½æćˆć‚‹ć‚ˆć†ć€ćƒ©ć‚¤ćƒˆćƒ¢ćƒ¼ćƒ‰ćØćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ć®åˆ‡ć‚Šę›æćˆćŖć©ć‚’ē¾Žć—ćå›³č§£ć—ć¦ć„ć¾ć™ć€‚ę©Ÿčƒ½ć®å¤šć•ć§ćÆćŖćć€č‡Ŗåˆ†ć‚‰ć—ćåæ«é©ć«ä½æćˆć‚‹åæƒåœ°ć‚ˆć•ć‚’č”Øē¾ć—ć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 13ļ¼ščŖ°ć‚‚ćŒåæƒåœ°ć‚ˆćä½æćˆć‚‹ćŸć‚ć«

    ä½æć„ć‚„ć™ć•ćØćÆć€ę©Ÿčƒ½ć®å¤šć•ć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    å®‰åæƒć—ć¦ä½æćˆć‚‹ć“ćØć§ć™ć€‚
    é•·ę™‚é–“ä½æć£ć¦ć‚‚ē–²ć‚ŒćŖć„ć“ćØć§ć™ć€‚
    č‡Ŗåˆ†ć‚‰ć—ćä½æćˆć‚‹ć“ćØć§ć™ć€‚
    ćƒ©ć‚¤ćƒˆćƒ¢ćƒ¼ćƒ‰ć‚‚ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ć‚‚ć€ćć®ćŸć‚ć«å­˜åœØć—ć¦ć„ć¾ć™ć€‚
    ć©ć‚“ćŖē’°å¢ƒć§ć‚‚ć€ć©ć‚“ćŖäŗŗć§ć‚‚ć€‚
    åæ«é©ć«ä½æćˆć‚‹ä½“éØ“ć‚’ē›®ęŒ‡ć—ć¾ć—ćŸć€‚


    ćƒŖćƒćƒ“ćƒŖć‚’é ‘å¼µć‚‹ę–¹ć€å­ć©ć‚‚ćŸć”ć€å¤–å›½čŖžć‚’å­¦ć¶ę–¹ć€å·¦åˆ©ćć®ę–¹ćŖć©ć€ē”»é¢ć®å‘ć“ć†ć«ć„ć‚‹å¤šę§˜ćŖćƒ¦ćƒ¼ć‚¶ćƒ¼ć‚’ęø©ć‹ćæć®ć‚ć‚‹å›³ć§ć¤ćŖć„ć§ć„ć¾ć™ć€‚ćƒ†ć‚ÆćƒŽćƒ­ć‚øćƒ¼ć§å¤šćć®äŗŗć«åÆ„ć‚Šę·»ć†ćƒ“ć‚øćƒ§ćƒ³ćŒęć‹ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 14ļ¼šå±Šć‘ćŸć„ē›øę‰‹

    ē§ćŸć”ćŒč¦‹ć¦ć„ć‚‹ć®ćÆć€ē”»é¢ć®å‘ć“ć†ć«ć„ć‚‹äŗŗć§ć™ć€‚
    ćƒŖćƒćƒ“ćƒŖć‚’é ‘å¼µć‚‹ę–¹ć€‚
    新しい言葉を学ぶ方。
    åˆć‚ć¦ę–‡å­—ć‚’ę›øćå­ć©ć‚‚ćŸć”ć€‚
    å·¦åˆ©ćć ć‹ć‚‰äøä¾æć‚’ę„Ÿć˜ć¦ć„ćŸę–¹ć€‚
    ćć®äø€äŗŗć²ćØć‚Šć«åÆ„ć‚Šę·»ć„ćŸć„ć€‚
    ćƒ†ć‚ÆćƒŽćƒ­ć‚øćƒ¼ć®ä¾”å€¤ćÆć€ć©ć‚Œć ć‘å¤šćć®äŗŗć‚’ę”Æćˆć‚‰ć‚Œć‚‹ć‹ć§ę±ŗć¾ć‚‹ćØäæ”ć˜ć¦ć„ć¾ć™ć€‚


    ć€ŒęœŖę„ćøć®ćƒ”ćƒƒć‚»ćƒ¼ć‚øć€ć‚’ä¼ćˆć‚‹ć‚Æćƒ­ćƒ¼ć‚øćƒ³ć‚°ć‚¹ćƒ©ć‚¤ćƒ‰ć§ć™ć€‚čŖ°ć‚‚ćŒč‡Ŗåˆ†ć‚‰ć—ćå­¦ć³ć€č”Øē¾ć§ćć‚‹ē¤¾ä¼šćøć®é”˜ć„ćŒć€ä½™éŸ»ć‚’ę®‹ć™ć‚·ćƒ³ćƒ—ćƒ«ć§ē¾Žć—ć„ćƒ¬ć‚¤ć‚¢ć‚¦ćƒˆć®äø­ć«č¾¼ć‚ć‚‰ć‚Œć¦ć„ć¾ć™ć€‚
    ć‚¹ćƒ©ć‚¤ćƒ‰ 15ļ¼šęœŖę„ćøć®ćƒ”ćƒƒć‚»ćƒ¼ć‚ø

    čŖ°ć‚‚ćŒć€ä½•ć‹ć‚’ä¼ćˆćŸć„ćØę€ć£ć¦ć„ć¾ć™ć€‚
    čŖ°ć‚‚ćŒć€å­¦ć³ćŸć„ćØę€ć£ć¦ć„ć¾ć™ć€‚
    čŖ°ć‚‚ćŒć€ęˆé•·ć—ćŸć„ćØę€ć£ć¦ć„ć¾ć™ć€‚
    ćć®é”˜ć„ć«ć€é•ć„ć‚„éšœå£ćŒć‚ć£ć¦ćÆćŖć‚‰ćŖć„ć€‚
    ē§ćŸć”ćŒä½œć£ćŸć®ćÆć€ć‚¢ćƒ—ćƒŖć§ćÆć‚ć‚Šć¾ć›ć‚“ć€‚
    åÆčƒ½ę€§ć‚’ć‚ćć‚‰ć‚ćŖćć¦ć„ć„ćØć„ć†ćƒ”ćƒƒć‚»ćƒ¼ć‚øć§ć™ć€‚
    äø€äŗŗć§ć‚‚å¤šćć®äŗŗćŒć€č‡Ŗåˆ†ć‚‰ć—ćå­¦ć³ć€č‡Ŗåˆ†ć‚‰ć—ćč”Øē¾ć§ćć‚‹ē¤¾ä¼šćøć€‚
    å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖćÆć€ćć®ęœŖę„ć‚’äæ”ć˜ć¦ę­©ćæē¶šć‘ć¾ć™ć€‚
    ć‚ć‚ŠćŒćØć†ć”ć–ć„ć¾ć—ćŸć€‚



    šŸ‘‡å®Ÿéš›ć®ć‚³ćƒ¼ćƒ‰ļ¼ˆä½æć„ę–¹ļ¼‰ćÆć“ć”ć‚‰

    ē”»åƒ

    ä»„äø‹ć«čØ˜č¼‰ć—ćŸHTMLć‚³ćƒ¼ćƒ‰ć‚’ć‚³ćƒ”ćƒ¼ć—ć¦
    ćƒ”ćƒ¢åø³ć«č²¼ć‚Šä»˜ć‘ć¦ć€ę‹”å¼µå­ć‚’.htmlć§äæå­˜ć—ć¦é–‹ć„ć¦é ‚ćć‹ć€
    Gemini恮Canvasć§ä½œć£ćŸćƒŖćƒ³ć‚Æć‚’ć‚æćƒƒćƒ—ć™ć‚‹ćØć€ä½æē”Øć§ćć¾ć™šŸ”—

    äøŠčØ˜ć®ćƒŖćƒ³ć‚Æć‚’ęŠ¼ć—ć¦ć€WEBćƒ–ćƒ©ć‚¦ć‚¶ć§é–‹ććØć€
    ä»„äø‹ć®ē”»é¢ćŒč”Øē¤ŗć•ć‚Œć€ć€Œē¶šć‘ć‚‹ć€ć®ćƒœć‚æćƒ³ć‚’ć‚ÆćƒŖćƒƒć‚Æļ¼
    ※Geminić«ćƒ­ć‚°ć‚¤ćƒ³ć—ćŖćć¦ć‚‚ć€ć‚¢ćƒ—ćƒŖć‚’ä½æē”Øć§ćć¾ć™ļ¼ļ¼

    ē”»åƒ


    ä¾‹ļ¼‰ćƒ•ć‚”ć‚¤ćƒ«åļ¼šjapanese_practice_workbook.html
    ć²ć‚‰ćŒćŖļ¼†ć‚«ć‚æć‚«ćƒŠļ¼†ę•°å­—ļ¼†ćƒ­ćƒ¼ćƒžå­— ē·“ēæ’åø³ļ¼ˆäø”åˆ©ććƒ»éŸ³å£°čŖ­ćæäøŠć’åÆ¾åæœļ¼‰.html

    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
        <title>ć²ć‚‰ćŒćŖļ¼†ć‚«ć‚æć‚«ćƒŠļ¼†ę•°å­—ļ¼†ćƒ­ćƒ¼ćƒžå­— ē·“ēæ’åø³ļ¼ˆäø”åˆ©ććƒ»éŸ³å£°čŖ­ćæäøŠć’åÆ¾åæœļ¼‰</title>
        <link href="https://fonts.googleapis.com/css2?family=Klee+One:wght@400;600&family=Noto+Sans+JP:wght@400;700&display=swap" rel="stylesheet">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
    
        <style>
            * { box-sizing: border-box; }
            body {
                margin: 0; 
                padding-top: calc(130px + env(safe-area-inset-top, 0px)); 
                font-family: 'Noto Sans JP', sans-serif;
                background-color: var(--body-bg); color: var(--text-color);
                transition: background-color 0.3s, color 0.3s;
                overflow: auto; touch-action: pan-x pan-y; 
            }
    
            /* ćƒ©ć‚¤ćƒˆćƒ¢ćƒ¼ćƒ‰ */
            :root {
                --body-bg: #e9ecef; --bg-color: #ffffff; --text-color: #212529;
                --border-color: #adb5bd; --grid-color: rgba(0,0,0,0.15);
                --trace-color: rgba(0,0,0,0.2); 
                --ctrl-bg: #ffffff; --block-bg: #f8f9fa; --cell-bg: #ffffff;
                --btn-hover: #f1f3f5;
            }
    
            /* 左手: 赤系 / å³ę‰‹: é’ē³» */
            body.left-hand { --accent-color: #b52a2a; } 
            body.right-hand { --accent-color: #2a5eb5; }
    
            /* ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ */
            body.dark-mode {
                --body-bg: #121212; --bg-color: #1e1e1e; --text-color: #f8f9fa;
                --border-color: #495057; --grid-color: rgba(255,255,255,0.15);
                --trace-color: rgba(255,255,255,0.25); 
                --ctrl-bg: #212529; --block-bg: #2b2b2b; --cell-bg: #1e1e1e;
                --btn-hover: #343a40;
            }
            body.dark-mode.left-hand { --accent-color: #ff6b6b; }
            body.dark-mode.right-hand { --accent-color: #4a90e2; }
    
            body.move-mode { touch-action: none; }
    
            /* å·¦ę‰‹ē”Øć®å “åˆćÆćƒžć‚¹ē›®ć®äø¦ć³é †ć‚’åč»¢ */
            body.left-hand .char-block { flex-direction: row-reverse; }
    
            /* ć‚³ćƒ³ćƒˆćƒ­ćƒ¼ćƒ«ćƒćƒ¼ļ¼ˆć‚»ćƒ¼ćƒ•ć‚ØćƒŖć‚¢åÆ¾åæœļ¼‰ */
            #controls {
                position: fixed; top: 0; left: 0; width: 100%;
                background-color: var(--ctrl-bg); 
                padding: calc(12px + env(safe-area-inset-top, 0px)) 15px 12px;
                display: flex; flex-direction: column; gap: 12px;
                align-items: center; 
                z-index: 1000; box-shadow: 0 2px 10px rgba(0,0,0,0.15);
                border-bottom: 1px solid var(--border-color);
                transition: background-color 0.3s;
            }
    
            .control-row { 
                display: flex; justify-content: flex-start; align-items: center; 
                flex-wrap: nowrap; gap: 12px; 
                width: fit-content; max-width: 100%;
                overflow-x: auto; 
                -ms-overflow-style: none; scrollbar-width: none;
                padding-bottom: 2px;
            }
            .control-row::-webkit-scrollbar { display: none; }
    
            .tool-group { 
                display: flex; align-items: center; background: var(--block-bg); 
                padding: 4px; border-radius: 25px; border: 1px solid var(--border-color); 
                gap: 2px; white-space: nowrap; 
            }
            
            .btn { 
                padding: 8px 14px; border: none; border-radius: 20px; 
                background-color: transparent; color: var(--text-color); cursor: pointer; 
                font-size: 14px; font-weight: 600; display: flex; align-items: center; gap: 6px; 
                transition: all 0.2s; font-family: inherit; white-space: nowrap;
            }
            .btn:hover:not(:disabled) { background-color: var(--btn-hover); }
            .btn:disabled { opacity: 0.5; cursor: not-allowed; }
            .btn.active { background-color: var(--accent-color); color: #fff; }
            .btn-primary { background-color: var(--accent-color); color: #fff; }
            .btn-primary:hover:not(:disabled) { filter: brightness(0.9); }
            .icon-btn { width: 40px; height: 40px; justify-content: center; border-radius: 50%; padding: 0; font-size: 16px; }
            .text-danger { color: #dc3545; } body.dark-mode .text-danger { color: #ff8787; }
    
            .format-select { padding: 8px 12px; border-radius: 20px; border: none; background-color: transparent; color: var(--text-color); font-weight: bold; font-family: inherit; outline: none; cursor: pointer; }
            .format-select option { color: #000; }
            .page-indicator { font-weight: bold; font-size: 16px; min-width: 60px; text-align: center; background: var(--block-bg); padding: 6px 16px; border-radius: 20px; border: 1px solid var(--border-color); white-space: nowrap; }
    
            #pages-container { display: flex; justify-content: center; padding: 20px; transform-origin: top center; transition: transform 0.1s ease-out; }
    
            /* ćƒšćƒ¼ć‚øć‚µć‚¤ć‚ŗ (A4横) */
            .page {
                display: none; width: 1120px; height: 792px; min-width: 1120px;
                background-color: var(--bg-color); padding: 15px 30px;
                border-radius: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); 
                margin: 0 auto; position: relative; flex-direction: column;
            }
            .page.active { display: flex; }
    
            .main-title { font-size: 22px; margin: 0 0 6px; border-bottom: 2px solid var(--border-color); padding-bottom: 6px; display: flex; align-items: center; gap: 10px; }
            .step-title-small { font-size: 14px; font-weight: bold; margin: 2px 0; display: flex; align-items: center; gap: 8px; }
            .step-desc { font-size: 13px; line-height: 1.4; margin-bottom: 8px; opacity: 0.9; white-space: pre-wrap; }
            .step-badge { background-color: var(--accent-color); color: #fff; padding: 2px 10px; border-radius: 12px; font-size: 13px; font-weight: bold; }
            .step-badge.large { font-size: 16px; padding: 4px 12px; }
    
            .char-block { display: flex; background-color: var(--block-bg); border-radius: 8px; border: 1px solid var(--border-color); }
            
            .cell { position: relative; border: 1px solid var(--border-color); background-color: var(--cell-bg); display: flex; align-items: center; justify-content: center; font-family: 'Klee One', cursive; line-height: 1; flex-shrink: 0; }
            .cell.sample span.main-char { color: var(--text-color); font-weight: 600; }
            .cell.trace span.main-char { color: var(--trace-color); }
            .cell::before, .cell::after { content: ''; position: absolute; pointer-events: none; }
            .cell::before { top: 50%; left: 0; right: 0; border-top: 1px dashed var(--grid-color); }
            .cell::after { left: 50%; top: 0; bottom: 0; border-left: 1px dashed var(--grid-color); }
            canvas { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; touch-action: none; }
    
            .cell.sample { cursor: pointer; transition: opacity 0.2s; }
            .cell.sample:active { opacity: 0.5; }
    
            .summary-wrapper { margin: 0 auto; width: max-content; display: flex; flex-direction: column; align-items: flex-start; }
            .blocks-container.compact { display: grid; grid-template-columns: repeat(7, max-content); justify-content: flex-start; gap: 6px 8px; margin-bottom: 6px; width: 100%; }
            .char-block.compact { gap: 2px; padding: 3px; }
            .cell.compact { width: 43px; height: 43px; font-size: 32px; } 
    
            .blocks-container.step-layout { display: grid; grid-template-columns: repeat(3, max-content); justify-content: center; gap: 20px 30px; margin-top: 20px; width: 100%; }
            .char-block.step { gap: 4px; padding: 6px; }
            .cell.step { width: 105px; height: 105px; font-size: 80px; } 
    
            .vertical-layout { display: flex; flex-direction: row-reverse; justify-content: center; gap: 14px; margin-top: 10px; }
            .column-group { display: flex; flex-direction: column; gap: 4px; }
            .horizontal-layout { display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 4px; margin-top: 10px; }
            .row-group { display: flex; flex-direction: row; gap: 10px; }
            .char-block.aiueo { gap: 2px; padding: 3px; }
            .cell.aiueo { width: 54px; height: 54px; font-size: 40px; }
    
            .blocks-container.numbers-layout, .blocks-container.kanji-layout { display: grid; grid-template-columns: repeat(3, max-content); justify-content: center; gap: 20px 20px; margin-top: 30px; width: 100%; }
            .char-block.numbers-block, .char-block.kanji { gap: 6px; padding: 6px; }
            .cell.numbers-cell, .cell.kanji { width: 105px; height: 105px; font-size: 80px; }
            .cell.kanji { font-size: 64px; font-family: 'Klee One', cursive; }
            
            .kanji-ruby { position: absolute; top: 6px; left: 0; right: 0; text-align: center; font-size: 18px; font-family: 'Klee One', cursive; font-weight: bold; color: var(--accent-color); opacity: 0.85; pointer-events: none; line-height: 1; }
            body.dark-mode .kanji-ruby { color: var(--text-color); opacity: 0.7; }
            .kanji-num { position: absolute; bottom: 6px; left: 0; right: 0; text-align: center; font-size: 18px; font-family: 'Noto Sans JP', sans-serif; font-weight: bold; color: var(--accent-color); opacity: 0.85; pointer-events: none; line-height: 1; }
            body.dark-mode .kanji-num { color: var(--text-color); opacity: 0.7; }
            .cell.kanji span.main-char { margin-top: 0; }
    
            .blocks-container.alphabet-layout { display: flex; flex-direction: column; gap: 14px; align-items: center; margin-top: 20px; width: 100%; }
            .blocks-container.alphabet-layout .row-group { display: flex; justify-content: center; align-items: center; gap: 10px; width: 100%; }
            .char-block.alphabet { gap: 3px; padding: 3px; }
            .cell.alphabet { width: 44px; height: 44px; font-size: 32px; font-family: 'Noto Sans JP', sans-serif; }
            .char-block.romaji { gap: 4px; padding: 4px; }
            .cell.romaji { width: 64px; height: 64px; font-size: 24px; font-family: 'Noto Sans JP', sans-serif; letter-spacing: 0; }
            
            .romaji-kana { position: absolute; top: 3px; left: 0; right: 0; display: flex; justify-content: space-between; padding: 0 4px; font-size: 14px; font-family: 'Klee One', cursive; font-weight: bold; color: var(--accent-color); opacity: 0.85; pointer-events: none; line-height: 1; }
            body.dark-mode .romaji-kana { color: var(--text-color); opacity: 0.7; }
            
            .cell.alphabet span.main-char { font-family: 'Noto Sans JP', sans-serif; }
            .cell.romaji span.main-char { font-family: 'Noto Sans JP', sans-serif; margin-top: 14px; }
    
            .char-block.romaji-yoon { gap: 6px; padding: 6px; }
            .cell.romaji-yoon { width: 96px; height: 96px; font-size: 40px; font-family: 'Noto Sans JP', sans-serif; letter-spacing: 0; }
            .cell.romaji-yoon .romaji-kana { font-size: 16px; top: 6px; padding: 0 8px; }
            .cell.romaji-yoon span.main-char { margin-top: 16px; }
    
            /* ==== ćƒ˜ćƒœćƒ³å¼ćƒ»čØ“ä»¤å¼ć®ęÆ”č¼ƒćƒšćƒ¼ć‚øē”Ø CSS ==== */
            .diff-page-container { display: flex; gap: 20px; margin-top: 15px; height: calc(100% - 40px); align-items: stretch; }
            .diff-text-area { width: 380px; display: flex; flex-direction: column; gap: 12px; }
            .diff-card { background: var(--block-bg); border: 1px solid var(--border-color); border-radius: 8px; padding: 12px 16px; font-size: 14.5px; line-height: 1.5; box-shadow: 0 2px 5px rgba(0,0,0,0.05); }
            .diff-card p { margin: 0; }
            .diff-card h4 { margin: 0 0 8px; font-size: 16px; color: var(--accent-color); border-bottom: 1px dashed var(--border-color); padding-bottom: 6px; display: flex; align-items: center; gap: 6px; }
            .hebon-card h4 { color: #d35400; } .kunrei-card h4 { color: #2980b9; }
            body.dark-mode .hebon-card h4 { color: #e67e22; } body.dark-mode .kunrei-card h4 { color: #3498db; }
            
            /* ćƒ˜ćƒœćƒ³å¼ćƒć‚¤ćƒ©ć‚¤ćƒˆļ¼ˆčµ¤ē³»ļ¼‰ */
            .diff-highlight { color: #e74c3c; font-weight: bold; }
            body.dark-mode .diff-highlight { color: #ff7675; }
            .cell.trace span.main-char .diff-highlight { color: inherit; } 
    
            /* čØ“ä»¤å¼ćƒć‚¤ćƒ©ć‚¤ćƒˆļ¼ˆé’ē³»ļ¼‰ */
            .kunrei-highlight { color: #2980b9; font-weight: bold; }
            body.dark-mode .kunrei-highlight { color: #3498db; }
            .cell.trace span.main-char .kunrei-highlight { color: inherit; } 
    
            .diff-note-list { margin: 0; padding-left: 20px; } .diff-note-list li { margin-bottom: 6px; }
            
            .diff-practice-area { flex: 1; background: var(--block-bg); border: 1px solid var(--border-color); border-radius: 8px; padding: 12px 16px; box-shadow: 0 2px 5px rgba(0,0,0,0.05); }
            .diff-table-header { display: flex; align-items: center; border-bottom: 2px solid var(--border-color); padding-bottom: 6px; margin-bottom: 8px; font-weight: bold; font-size: 14px; text-align: center; color: var(--text-color); }
            .diff-table-header.small { font-size: 12px; }
            
            .diff-col-kana { width: 45px; text-align: center; font-size: 18px; font-family: 'Klee One', cursive; font-weight: bold; }
            .diff-col-hebon, .diff-col-kunrei { flex: 1; display: flex; justify-content: center; align-items: center; position: relative; }
            
            .diff-row { display: flex; align-items: center; margin-bottom: 6px; background: var(--cell-bg); padding: 6px; border-radius: 6px; border: 1px solid var(--border-color); }
            .char-block.diff-block { gap: 4px; padding: 0; border: none; background: transparent; }
            .cell.diff-cell { width: 52px; height: 52px; font-size: 20px; border-radius: 4px; font-family: 'Noto Sans JP', sans-serif; }
            .cell.diff-cell.small { width: 46px; height: 46px; font-size: 16px; }
            .cell.diff-cell span.main-char { margin-top: 0; } 
    
            /* ćƒ­ćƒ¼ćƒ‰ē”Øć‚Ŗćƒ¼ćƒćƒ¼ćƒ¬ć‚¤ */
            #loading-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.85); z-index: 9999; flex-direction: column; justify-content: center; align-items: center; color: white; text-align: center; }
    
            /* ē”»åƒäæå­˜ļ¼ˆå†™ēœŸć‚¢ćƒ—ćƒŖē”Øļ¼‰ćƒ¢ćƒ¼ćƒ€ćƒ« */
            #image-modal {
                display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;
                background: rgba(0,0,0,0.95); z-index: 10000; flex-direction: column;
            }
            .modal-header {
                display: flex; justify-content: space-between; align-items: center;
                padding: calc(15px + env(safe-area-inset-top, 0px)) 15px 15px; 
                background: #222; color: #fff; font-weight: bold;
            }
            .modal-content {
                flex: 1; overflow-y: auto; padding: 20px; display: flex; flex-direction: column; gap: 20px; align-items: center;
            }
            .modal-content img {
                max-width: 100%; height: auto; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.5);
                border: 2px solid #555;
            }
        </style>
    </head>
    <body class="dark-mode left-hand" data-tool="pen">
    
        <div id="loading-overlay">
            <i class="fa-solid fa-spinner fa-spin fa-4x"></i>
            <h2 style="margin-top: 20px;" data-i18n="common.loading_title">äæå­˜å‡¦ē†äø­...</h2>
            <p data-i18n="common.loading_desc"></p>
        </div>
    
        <!-- å†™ēœŸć‚¢ćƒ—ćƒŖäæå­˜ē”Øćƒ¢ćƒ¼ćƒ€ćƒ« -->
        <div id="image-modal">
            <div class="modal-header">
                <span data-i18n="common.modal_guide">ē”»åƒć‚’é•·ęŠ¼ć—ć—ć¦ć€Œå†™ēœŸć«čæ½åŠ ć€ć¾ćŸćÆć€Œäæå­˜ć€ć‚’éøć‚“ć§ćć ć•ć„ć€‚</span>
                <button class="btn icon-btn text-danger" onclick="closeModal()"><i class="fa-solid fa-xmark"></i></button>
            </div>
            <div class="modal-content" id="modal-images"></div>
        </div>
    
        <!-- ć‚³ćƒ³ćƒˆćƒ­ćƒ¼ćƒ«ćƒćƒ¼ -->
        <div id="controls">
            <div class="control-row">
                <div class="tool-group">
                    <button class="btn btn-primary" onclick="setScriptMode('kana')" title="ć²ć‚‰ćŒćŖ/ć‚«ć‚æć‚«ćƒŠ" style="min-width: 90px; justify-content: center; background-color: #2b908f;">
                        <span id="kana-btn-text">ć²ć‚‰ćŒćŖ</span>
                    </button>
                    <button class="btn btn-primary" onclick="setScriptMode('alphabet')" title="ćƒ­ćƒ¼ćƒžå­—" style="min-width: 90px; justify-content: center; background-color: #8e44ad;">
                        <span data-i18n="common.script_alphabet">ćƒ­ćƒ¼ćƒžå­—</span>
                    </button>
                    <button class="btn btn-primary" onclick="setScriptMode('numbers')" title="ę•°å­—" style="min-width: 90px; justify-content: center; background-color: #d35400;">
                        <span data-i18n="common.script_numbers">ę•°å­—</span>
                    </button>
                    <button class="btn btn-primary" id="hand-toggle-btn" onclick="toggleHand()" title="åˆ©ćę‰‹åˆ‡ć‚Šę›æćˆ" style="min-width: 100px; justify-content: center;">
                        <i class="fa-solid fa-hand"></i> <span>左手用</span>
                    </button>
                </div>
                
                <div class="tool-group">
                    <button class="btn" onclick="clearCurrentPage()"><i class="fa-regular fa-trash-can"></i> <span data-i18n="common.btn_clear_page">ćƒšćƒ¼ć‚øę¶ˆåŽ»</span></button>
                    <button class="btn text-danger" onclick="clearAllPages()"><i class="fa-solid fa-trash-can"></i> <span data-i18n="common.btn_clear_all">å…Øę¶ˆåŽ»</span></button>
                </div>
                
                <div class="tool-group">
                    <select id="save-format" class="format-select">
                        <option value="png">PNG</option>
                        <option value="pdf">PDF</option>
                    </select>
                    <button class="btn btn-primary" onclick="saveCurrentPage()"><i class="fa-solid fa-download"></i> <span data-i18n="common.btn_save_page">äæå­˜</span></button>
                    <button class="btn btn-primary" onclick="saveAllPages()"><i class="fa-solid fa-file-zipper"></i> <span data-i18n="common.btn_save_all">å…Øäæå­˜</span></button>
                </div>
            </div>
            
            <div class="control-row">
                <div class="tool-group">
                    <button class="btn active icon-btn" id="btn-pen" onclick="setTool('pen')" title="Pen"><i class="fa-solid fa-pen"></i></button>
                    <button class="btn icon-btn" id="btn-eraser" onclick="setTool('eraser')" title="Eraser"><i class="fa-solid fa-eraser"></i></button>
                    <button class="btn icon-btn" id="btn-move" onclick="setTool('move')" title="Move/Pan"><i class="fa-solid fa-hand"></i></button>
                </div>
                
                <div class="tool-group nav-group" style="padding: 4px;">
                    <button class="btn" onclick="goToTop()" title="Home">
                        <i class="fa-solid fa-house"></i>
                    </button>
                    <button class="btn" id="prev-btn" onclick="changePage(-1)">
                        <i class="fa-solid fa-chevron-left"></i> <span data-i18n="common.btn_prev">å‰ćø</span>
                    </button>
                    <span class="page-indicator" id="page-indicator" style="border: none; background: transparent;">1 / 8</span>
                    <button class="btn" id="next-btn" onclick="changePage(1)">
                        <span data-i18n="common.btn_next">欔へ</span> <i class="fa-solid fa-chevron-right"></i>
                    </button>
                </div>
    
                <!-- ć‚ŗćƒ¼ćƒ ę“ä½œć‚³ćƒ³ćƒˆćƒ­ćƒ¼ćƒ«ć‚’čæ½åŠ  -->
                <div class="tool-group">
                    <button class="btn icon-btn" onclick="changeZoom(-0.1)" title="ēø®å°"><i class="fa-solid fa-magnifying-glass-minus"></i></button>
                    <button class="btn icon-btn" onclick="resetZoom()" title="100%" style="font-size: 14px;"><i class="fa-solid fa-expand"></i></button>
                    <button class="btn icon-btn" onclick="changeZoom(0.1)" title="拔大"><i class="fa-solid fa-magnifying-glass-plus"></i></button>
                </div>
    
                <div class="tool-group">
                    <button class="btn icon-btn" onclick="speakCurrentPage()" title="ćƒšćƒ¼ć‚øć‚’čŖ­ćæäøŠć’ć‚‹"><i class="fa-solid fa-volume-high"></i></button>
                    <button class="btn icon-btn text-danger" onclick="stopSpeaking()" title="čŖ­ćæäøŠć’ć‚’åœę­¢ć™ć‚‹"><i class="fa-solid fa-stop"></i></button>
                </div>
                
                <div class="tool-group">
                    <button class="btn icon-btn" onclick="toggleLang()" title="Language Switch"><i class="fa-solid fa-language"></i></button>
                    <button class="btn icon-btn jump-btn" onclick="jumpToAiueoV()" title="ēø¦ę›øć" style="gap: 2px;">
                        <i class="fa-solid fa-arrow-down" style="font-size: 12px;"></i>
                        <span id="jump-v-text" style="font-size: 12px; font-weight: bold; font-family: 'Noto Sans JP';">恂</span>
                    </button>
                    <button class="btn icon-btn jump-btn" onclick="jumpToAiueoH()" title="ęØŖę›øć" style="gap: 2px;">
                        <i class="fa-solid fa-arrow-right" style="font-size: 12px;"></i>
                        <span id="jump-h-text" style="font-size: 12px; font-weight: bold; font-family: 'Noto Sans JP';">恂</span>
                    </button>
                    <button class="btn icon-btn" onclick="toggleTheme()" title="Theme"><i id="theme-icon" class="fa-solid fa-sun"></i></button>
                </div>
            </div>
        </div>
    
        <div id="pages-container"></div>
    
        <script>
            // iOS/iPadOSåˆ¤å®šļ¼ˆé•·ęŠ¼ć—äæå­˜ćƒ¢ćƒ¼ćƒ‰ē”Øļ¼‰
            const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
    
            let currentLang = 'jp';
            let currentHand = 'left';    
            let currentScript = 'hiragana';
            let lastKana = 'hiragana';
            let lastKanaPage = 1;            
            let currentPage = 1;
            let currentTool = 'pen';
            let penSize = 3;
            let eraserSize = 50;
            let currentZoom = 1.0;
            let lastSpokenChar = '';
            let lastSpokenTime = 0;
    
            const i18n = {
                jp: {
                    common: {
                        btn_clear_page: "ę¶ˆåŽ»", btn_clear_all: "å…Øę¶ˆåŽ»", btn_save_page: "äæå­˜", btn_save_all: "å…Øäæå­˜", btn_prev: "å‰ćø", btn_next: "欔へ",
                        loading_title: "äæå­˜å‡¦ē†äø­...", loading_desc: "ā€»å…Øćƒšćƒ¼ć‚øäæå­˜ć«ćÆå°‘ć—ę™‚é–“ćŒć‹ć‹ć‚Šć¾ć™ć€‚<br>ćƒ–ćƒ©ć‚¦ć‚¶ć‹ć‚‰<b>ć€Œč¤‡ę•°ćƒ•ć‚”ć‚¤ćƒ«ć®ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰ć‚’čØ±åÆć—ć¾ć™ć‹ļ¼Ÿć€</b>ćØčžć‹ć‚ŒćŸå “åˆćÆć€<b>ć€ŒčØ±åÆć€</b>ć‚’ęŠ¼ć—ć¦ćć ć•ć„ć€‚",
                        script_hiragana: "ć²ć‚‰ćŒćŖ", script_katakana: "ć‚«ć‚æć‚«ćƒŠ", script_alphabet: "ćƒ­ćƒ¼ćƒžå­—", script_numbers: "ę•°å­—", hand_left: "左手用", hand_right: "å³ę‰‹ē”Ø",
                        kana: "かな", hebon: "ćƒ˜ćƒœćƒ³å¼", kunrei: "čØ“ä»¤å¼",
                        modal_guide: "ē”»åƒć‚’é•·ęŠ¼ć—ć—ć¦ć€Œå†™ēœŸć«čæ½åŠ ć€ć¾ćŸćÆć€Œē”»åƒć‚’äæå­˜ć€ć‚’éøć‚“ć§ćć ć•ć„ć€‚"
                    },
                    hiragana: {
                        title_main: { left: "左手用 ć²ć‚‰ćŒćŖē·“ēæ’åø³", right: "å³ę‰‹ē”Ø ć²ć‚‰ćŒćŖē·“ēæ’åø³" }, title_aiueo_v: "ēø¦ę›øć äŗ”åéŸ³é †ļ¼ˆć‚ć€œć‚č”Œļ¼‰", title_aiueo_h: "ęØŖę›øć äŗ”åéŸ³é †ļ¼ˆć‚ć€œć‚č”Œļ¼‰",
                        step1_title: "1ē”»ć®ć‚·ćƒ³ćƒ—ćƒ«ćŖē·šļ¼ˆč¶…å…„é–€ļ¼‰", step2_title: "å˜ē“”ćŖć‚«ćƒ¼ćƒ–ćØ2ē”»ć®ę–‡å­—ļ¼ˆåˆē“šļ¼‰", step3_title: "ęŠ˜ć‚Ščæ”ć—ćØę³¢ę‰“ć”ļ¼ˆäø­ē“šļ¼‰", step4_title: "ē·šć®äŗ¤å·®ćØćƒćƒ©ćƒ³ć‚¹ļ¼ˆäøŠē“šļ¼‰", step5_title: "ćć‚‹ć£ćØå›žć‚‹ć€Œēµć³ć€ļ¼ˆęœ€é›£é–¢ļ¼‰"
                    },
                    katakana: {
                        title_main: { left: "左手用 ć‚«ć‚æć‚«ćƒŠē·“ēæ’åø³", right: "å³ę‰‹ē”Ø ć‚«ć‚æć‚«ćƒŠē·“ēæ’åø³" }, title_aiueo_v: "ēø¦ę›øć äŗ”åéŸ³é †ļ¼ˆć‚¢ć€œćƒÆč”Œļ¼‰", title_aiueo_h: "ęØŖę›øć äŗ”åéŸ³é †ļ¼ˆć‚¢ć€œćƒÆč”Œļ¼‰",
                        step1_title: "ć‚·ćƒ³ćƒ—ćƒ«ćŖē›“ē·šćØę‰•ć„ļ¼ˆč¶…å…„é–€ļ¼‰", step2_title: "å‘ććØč§’åŗ¦ćŒå‘½ļ¼ˆåˆē“šļ¼‰", step3_title: "ęŠ˜ć‚ŒćØć‚«ćƒ‰ļ¼ˆäø­ē“šļ¼‰", step4_title: "äŗ¤å·®ćØćƒćƒ©ćƒ³ć‚¹ļ¼ˆäøŠē“šļ¼‰", step5_title: "ē©ŗé–“ć®å–ć‚Šę–¹ćØå½¢ļ¼ˆęœ€é›£é–¢ļ¼‰"
                    },
                    alphabet: {
                        title_main: { left: "左手用 ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆćƒ»ćƒ­ćƒ¼ćƒžå­—", right: "å³ę‰‹ē”Ø ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆćƒ»ćƒ­ćƒ¼ćƒžå­—" },
                        step1_title: "ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆ 大文字 (A怜Z)", step2_title: "ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆ å°ę–‡å­— (a怜z)", step3_title: "ćƒ­ćƒ¼ćƒžå­— (ć‚č”Œć€œćŖč”Œ)", step4_title: "ćƒ­ćƒ¼ćƒžå­— (ćÆč”Œć€œć‚č”Œ)", step5_title: "ćƒ­ćƒ¼ćƒžå­— ęæéŸ³ćƒ»åŠęæéŸ³ (ćŒć€œć±č”Œ)", step6_title: "ćƒ­ćƒ¼ćƒžå­— ę‹—éŸ³1 (ćć‚ƒć€œć«ć‚ƒ)", step7_title: "ćƒ­ćƒ¼ćƒžå­— ę‹—éŸ³2 (ć²ć‚ƒć€œć‚Šć‚ƒ)", step8_title: "ćƒ­ćƒ¼ćƒžå­— ę‹—éŸ³3 (ćŽć‚ƒć€œć“ć‚ƒ)",
                        step9_title: "ćƒ˜ćƒœćƒ³å¼ćØčØ“ä»¤å¼ć®é•ć„ļ¼ˆå­éŸ³ļ¼‰", step10_title: "ćƒ˜ćƒœćƒ³å¼ćØčØ“ä»¤å¼ć®é•ć„ļ¼ˆę‹—éŸ³ļ¼‰",
                        diff_hebon_title: "<i class=\"fa-solid fa-passport\"></i> ćƒ˜ćƒœćƒ³å¼",
                        diff_hebon_desc: "č‹±čŖžč©±č€…ćŒē™ŗéŸ³ć—ć‚„ć™ć„ę›øćę–¹ć€‚<br>SI → <span class=\"diff-highlight\">SHI</span> / TI → <span class=\"diff-highlight\">CHI</span><br>TU → <span class=\"diff-highlight\">TSU</span> / HU → <span class=\"diff-highlight\">FU</span><br>šŸ‘‰ <strong>ćƒ‘ć‚¹ćƒćƒ¼ćƒˆć‚„é§…åćƒ»é“č·ÆęØ™č­˜</strong>ćŖć©ć§äø€čˆ¬ēš„ć€‚",
                        diff_kunrei_title: "<i class=\"fa-solid fa-school\"></i> čØ“ä»¤å¼",
                        diff_kunrei_desc: "äŗ”åéŸ³č”Øć®č¦å‰‡ć‚’ćć®ć¾ć¾č”Øć™ę›øćę–¹ć€‚<br>ć•č”Œ: SA <span class=\"kunrei-highlight\">SI</span> SU SE SO<br>た蔌: TA <span class=\"kunrei-highlight\">TI</span> <span class=\"kunrei-highlight\">TU</span> TE TO<br>šŸ‘‰ <strong>å­¦ę ”ć®ćƒ­ćƒ¼ćƒžå­—ę•™č‚²</strong>ć§ēæ’ć†ć“ćØćŒå¤šć„ć€‚",
                        diff_note_title: "āš ļø ē‰¹ć«é–“é•ćˆć‚„ć™ć„ę³Øę„ē‚¹",
                        diff_note_1: "<strong>ć€Œćµć€</strong> <span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>FU</b></span> / <span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>HU</b></span><br><strong>怌恗怍</strong> <span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>SHI</b></span> / <span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>SI</b></span><br><strong>ć€Œć”ć€</strong> <span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>CHI</b></span> / <span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>TI</b></span><br><strong>怌恤怍</strong> <span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>TSU</b></span> / <span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>TU</b></span>",
                        diff_note_2: "<strong>ć€Œć—ć‚ƒćƒ»ć—ć‚…ćƒ»ć—ć‚‡ć€</strong><br><span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>SHA惻SHU惻SHO</b></span><br><span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>SYA惻SYU惻SYO</b></span><br><br><strong>ć€Œć”ć‚ƒćƒ»ć”ć‚…ćƒ»ć”ć‚‡ć€</strong><br><span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>CHA惻CHU惻CHO</b></span><br><span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>TYA惻TYU惻TYO</b></span><br><br><strong>ć€Œć˜ć‚ƒćƒ»ć˜ć‚…ćƒ»ć˜ć‚‡ć€</strong><br><span class=\"diff-highlight\">ćƒ˜ćƒœćƒ³å¼: <b>JA惻JU惻JO</b></span><br><span class=\"kunrei-highlight\">čØ“ä»¤å¼: <b>ZYA惻ZYU惻ZYO</b></span>"
                    },
                    numbers: { title_main: { left: "左手用 ę•°å­—ćƒ»ę¼¢ę•°å­— ē·“ēæ’åø³", right: "å³ę‰‹ē”Ø ę•°å­—ćƒ»ę¼¢ę•°å­— ē·“ēæ’åø³" }, step1_title: "算用数字 (0怜9)", step2_title: "漢数字 (äø€ć€œäø‡ć€ć€‡ć€å††)" }
                },
                en: {
                    common: {
                        btn_clear_page: "Clear", btn_clear_all: "Clear All", btn_save_page: "Save", btn_save_all: "Save All", btn_prev: "Prev", btn_next: "Next",
                        loading_title: "Saving...", loading_desc: "Saving all pages may take a while.<br>If asked 'Allow downloading multiple files?', please select <b>Allow</b>.",
                        script_hiragana: "Hiragana", script_katakana: "Katakana", script_alphabet: "Romaji", script_numbers: "Numbers", hand_left: "Left", hand_right: "Right",
                        kana: "Kana", hebon: "Hepburn", kunrei: "Kunrei",
                        modal_guide: "Long press the image to save it to your Photos."
                    },
                    hiragana: { title_main: { left: "Left-Handed Hiragana", right: "Right-Handed Hiragana" }, title_aiueo_v: "Vertical Gojuon", title_aiueo_h: "Horizontal Gojuon", step1_title: "1-Stroke Lines", step2_title: "Simple Curves", step3_title: "Fold Back & Wave", step4_title: "Intersections", step5_title: "Looping 'Knots'" },
                    katakana: { title_main: { left: "Left-Handed Katakana", right: "Right-Handed Katakana" }, title_aiueo_v: "Vertical Gojuon", title_aiueo_h: "Horizontal Gojuon", step1_title: "Simple Lines", step2_title: "Direction & Angle", step3_title: "Folds & Corners", step4_title: "Intersections", step5_title: "Spacing" },
                    alphabet: {
                        title_main: { left: "Left-Handed Alphabet & Romaji", right: "Right-Handed Alphabet & Romaji" },
                        step1_title: "Alphabet Uppercase (A-Z)", step2_title: "Alphabet Lowercase (a-z)", step3_title: "Romaji (A - No)", step4_title: "Romaji (Ha - Wa)", step5_title: "Romaji Dakuon (Ga - Pa)", step6_title: "Romaji Yoon 1 (Kya - Nya)", step7_title: "Romaji Yoon 2 (Hya - Rya)", step8_title: "Romaji Yoon 3 (Gya - Pya)",
                        step9_title: "Differences: Hepburn vs Kunrei (Consonants)", step10_title: "Differences: Hepburn vs Kunrei (Yoon)",
                        diff_hebon_title: "<i class=\"fa-solid fa-passport\"></i> Hepburn",
                        diff_hebon_desc: "Pronunciation-based spelling.<br>SI → <span class=\"diff-highlight\">SHI</span> / TI → <span class=\"diff-highlight\">CHI</span><br>TU → <span class=\"diff-highlight\">TSU</span> / HU → <span class=\"diff-highlight\">FU</span><br>šŸ‘‰ Used in <strong>passports and signs</strong>.",
                        diff_kunrei_title: "<i class=\"fa-solid fa-school\"></i> Kunrei",
                        diff_kunrei_desc: "Follows the Gojuon rules.<br>Sa row: SA <span class=\"kunrei-highlight\">SI</span> SU SE SO<br>Ta row: TA <span class=\"kunrei-highlight\">TI</span> <span class=\"kunrei-highlight\">TU</span> TE TO<br>šŸ‘‰ Taught in <strong>Japanese schools</strong>.",
                        diff_note_title: "āš ļø Common Mistakes",
                        diff_note_1: "<strong>ć€Œćµ(fu/hu)怍</strong> <span class=\"diff-highlight\">Hepburn: <b>FU</b></span> / <span class=\"kunrei-highlight\">Kunrei: <b>HU</b></span><br><strong>怌恗(shi/si)怍</strong> <span class=\"diff-highlight\">Hepburn: <b>SHI</b></span> / <span class=\"kunrei-highlight\">Kunrei: <b>SI</b></span><br><strong>ć€Œć”(chi/ti)怍</strong> <span class=\"diff-highlight\">Hepburn: <b>CHI</b></span> / <span class=\"kunrei-highlight\">Kunrei: <b>TI</b></span><br><strong>怌恤(tsu/tu)怍</strong> <span class=\"diff-highlight\">Hepburn: <b>TSU</b></span> / <span class=\"kunrei-highlight\">Kunrei: <b>TU</b></span>",
                        diff_note_2: "<strong>ć€Œć—ć‚ƒćƒ»ć—ć‚…ćƒ»ć—ć‚‡ć€</strong><br><span class=\"diff-highlight\">Hepburn: <b>SHA惻SHU惻SHO</b></span><br><span class=\"kunrei-highlight\">Kunrei: <b>SYA惻SYU惻SYO</b></span><br><br><strong>ć€Œć”ć‚ƒćƒ»ć”ć‚…ćƒ»ć”ć‚‡ć€</strong><br><span class=\"diff-highlight\">Hepburn: <b>CHA惻CHU惻CHO</b></span><br><span class=\"kunrei-highlight\">Kunrei: <b>TYA惻TYU惻TYO</b></span><br><br><strong>ć€Œć˜ć‚ƒćƒ»ć˜ć‚…ćƒ»ć˜ć‚‡ć€</strong><br><span class=\"diff-highlight\">Hepburn: <b>JA惻JU惻JO</b></span><br><span class=\"kunrei-highlight\">Kunrei: <b>ZYA惻ZYU惻ZYO</b></span>"
                    },
                    numbers: { title_main: { left: "Left-Handed Numbers", right: "Right-Handed Numbers" }, step1_title: "Arabic Numerals (0-9)", step2_title: "Kanji Numerals" }
                }
            };
    
            const charsData = {
                hiragana: {
                    steps: [ 
                        { id: 1, chars: ['恗','恤','恏','へ'] }, 
                        { id: 2, chars: ['恮','恦','と','恄','恓','悊','ひ'] }, 
                        { id: 3, chars: ['恆','恈','恝','悄','悆','悈','悋','悍','悓'] }, 
                        { id: 4, chars: ['恋','恍','恑','恕','恛','た','恔','恫','恵','悂','悉','悏','悒'] }, 
                        { id: 5, chars: ['恂','お','恙','な','恬','恭','は','恻','ま','み','悀','悁','悌'] } 
                    ],
                    aiueo: [ 
                        ['恂','恄','恆','恈','恊'], ['恋','恍','恏','恑','恓'], ['恕','恗','恙','恛','恝'], 
                        ['た','ご','つ','て','と'], ['な','に','ぬ','ね','の'], ['は','ひ','ふ','へ','ほ'], 
                        ['ま','み','悀','悁','悂'], ['悄','','悆','','悈'], ['悉','悊','悋','悌','悍'], 
                        ['悏','','悒','','悓'] 
                    ]
                },
                katakana: {
                    steps: [ 
                        { id: 1, chars: ['悤','惎','惏','惘','惈','惋','惕'] }, 
                        { id: 2, chars: ['ć‚·','惄','ソ','ン','惠','惤','ク'] }, 
                        { id: 3, chars: ['ć‚¢','ć‚«','コ','悵','ć‚»','タ','惆','ナ','惍','惩','惭'] }, 
                        { id: 4, chars: ['惞','惔','悭','悱','惁','ヌ','ス','惛','モ','ヨ','惫','ワ'] }, 
                        { id: 5, chars: ['悦','エ','オ','惒','ミ','惦','リ','惬','ヲ'] } 
                    ],
                    aiueo: [ 
                        ['ć‚¢','悤','悦','エ','オ'], ['ć‚«','悭','ク','悱','コ'], ['悵','ć‚·','ス','ć‚»','ソ'], 
                        ['タ','惁','惄','惆','惈'], ['ナ','惋','ヌ','惍','惎'], ['惏','惒','惕','惘','惛'], 
                        ['惞','ミ','惠','惔','モ'], ['惤','','惦','','ヨ'], ['惩','リ','惫','惬','惭'], 
                        ['ワ','','ヲ','','ン'] 
                    ]
                },
                alphabet: {
                    uppercase: [ 
                        ['A','B','C','D','E','F','G'], ['H','I','J','K','L','M','N'], 
                        ['O','P','Q','R','S','T','U'], ['V','W','X','Y','Z'] 
                    ],
                    lowercase: [ 
                        ['a','b','c','d','e','f','g'], ['h','i','j','k','l','m','n'], 
                        ['o','p','q','r','s','t','u'], ['v','w','x','y','z'] 
                    ],
                    romaji1: [ 
                        [{c:'a',h:'恂',k:'ć‚¢'},{c:'i',h:'恄',k:'悤'},{c:'u',h:'恆',k:'悦'},{c:'e',h:'恈',k:'エ'},{c:'o',h:'お',k:'オ'}], 
                        [{c:'ka',h:'恋',k:'ć‚«'},{c:'ki',h:'恍',k:'悭'},{c:'ku',h:'恏',k:'ク'},{c:'ke',h:'恑',k:'悱'},{c:'ko',h:'恓',k:'コ'}], 
                        [{c:'sa',h:'恕',k:'悵'},{c:'s<span class="diff-highlight">h</span>i',h:'恗',k:'ć‚·'},{c:'su',h:'恙',k:'ス'},{c:'se',h:'恛',k:'ć‚»'},{c:'so',h:'恝',k:'ソ'}], 
                        [{c:'ta',h:'た',k:'タ'},{c:'<span class="diff-highlight">c</span>hi',h:'恔',k:'惁'},{c:'t<span class="diff-highlight">s</span>u',h:'恤',k:'惄'},{c:'te',h:'恦',k:'惆'},{c:'to',h:'と',k:'惈'}], 
                        [{c:'na',h:'な',k:'ナ'},{c:'ni',h:'恫',k:'惋'},{c:'nu',h:'恬',k:'ヌ'},{c:'ne',h:'恭',k:'惍'},{c:'no',h:'恮',k:'惎'}] 
                    ],
                    romaji2: [ 
                        [{c:'ha',h:'は',k:'惏'},{c:'hi',h:'ひ',k:'惒'},{c:'<span class="diff-highlight">f</span>u',h:'恵',k:'惕'},{c:'he',h:'へ',k:'惘'},{c:'ho',h:'恻',k:'惛'}], 
                        [{c:'ma',h:'ま',k:'惞'},{c:'mi',h:'み',k:'ミ'},{c:'mu',h:'悀',k:'惠'},{c:'me',h:'悁',k:'惔'},{c:'mo',h:'悂',k:'モ'}], 
                        [{c:'ya',h:'悄',k:'惤'},null,{c:'yu',h:'悆',k:'惦'},null,{c:'yo',h:'悈',k:'ヨ'}], 
                        [{c:'ra',h:'悉',k:'惩'},{c:'ri',h:'悊',k:'リ'},{c:'ru',h:'悋',k:'惫'},{c:'re',h:'悌',k:'惬'},{c:'ro',h:'悍',k:'惭'}], 
                        [{c:'wa',h:'悏',k:'ワ'},null,{c:'o',h:'悒',k:'ヲ'},null,{c:'n',h:'悓',k:'ン'}] 
                    ],
                    romaji3: [ 
                        [{c:'ga',h:'が',k:'悬'},{c:'gi',h:'恎',k:'ć‚®'},{c:'gu',h:'恐',k:'悰'},{c:'ge',h:'恒',k:'ゲ'},{c:'go',h:'恔',k:'ć‚“'}], 
                        [{c:'za',h:'恖',k:'ć‚¶'},{c:'<span class="diff-highlight">j</span>i',h:'恘',k:'ジ'},{c:'zu',h:'ず',k:'ズ'},{c:'ze',h:'ぜ',k:'ゼ'},{c:'zo',h:'恞',k:'ゾ'}], 
                        [{c:'da',h:'恠',k:'惀'},{c:'<span class="diff-highlight">j</span>i',h:'ぢ',k:'惂'},{c:'zu',h:'恄',k:'情'},{c:'de',h:'恧',k:'惇'},{c:'do',h:'恩',k:'惉'}], 
                        [{c:'ba',h:'恰',k:'惐'},{c:'bi',h:'び',k:'惓'},{c:'bu',h:'恶',k:'惖'},{c:'be',h:'べ',k:'惙'},{c:'bo',h:'ぼ',k:'ボ'}], 
                        [{c:'pa',h:'恱',k:'惑'},{c:'pi',h:'恓',k:'惔'},{c:'pu',h:'恷',k:'惗'},{c:'pe',h:'ぺ',k:'ペ'},{c:'po',h:'ぽ',k:'惝'}] 
                    ],
                    romaji4: [ 
                        [{c:'kya',h:'恍悃',k:'ć‚­ćƒ£'},{c:'kyu',h:'恍悅',k:'ć‚­ćƒ„'},{c:'kyo',h:'恍悇',k:'悭惧'}], 
                        [{c:'s<span class="diff-highlight">h</span>a',h:'恗悃',k:'ć‚·ćƒ£'},{c:'s<span class="diff-highlight">h</span>u',h:'恗悅',k:'ć‚·ćƒ„'},{c:'s<span class="diff-highlight">h</span>o',h:'恗悇',k:'ć‚·ćƒ§'}], 
                        [{c:'<span class="diff-highlight">ch</span>a',h:'ć”ć‚ƒ',k:'チャ'},{c:'<span class="diff-highlight">ch</span>u',h:'恔悅',k:'惁惄'},{c:'<span class="diff-highlight">ch</span>o',h:'恔悇',k:'惁惧'}], 
                        [{c:'nya',h:'ć«ć‚ƒ',k:'ćƒ‹ćƒ£'},{c:'nyu',h:'恫悅',k:'ćƒ‹ćƒ„'},{c:'nyo',h:'恫悇',k:'惋惧'}] 
                    ],
                    romaji5: [ 
                        [{c:'hya',h:'ć²ć‚ƒ',k:'ćƒ’ćƒ£'},{c:'hyu',h:'ひゅ',k:'ćƒ’ćƒ„'},{c:'hyo',h:'ひょ',k:'惒惧'}], 
                        [{c:'mya',h:'ćæć‚ƒ',k:'ミャ'},{c:'myu',h:'みゅ',k:'ミツ'},{c:'myo',h:'みょ',k:'ミョ'}], 
                        [{c:'rya',h:'悊悃',k:'リャ'},{c:'ryu',h:'悊悅',k:'リツ'},{c:'ryo',h:'悊悇',k:'リョ'}] 
                    ],
                    romaji6: [ 
                        [{c:'gya',h:'恎悃',k:'ć‚®ćƒ£'},{c:'gyu',h:'恎悅',k:'ć‚®ćƒ„'},{c:'gyo',h:'恎悇',k:'ć‚®ćƒ§'}], 
                        [{c:'<span class="diff-highlight">j</span>a',h:'恘悃',k:'ć‚øćƒ£'},{c:'<span class="diff-highlight">j</span>u',h:'恘悅',k:'ć‚øćƒ„'},{c:'<span class="diff-highlight">j</span>o',h:'恘悇',k:'ć‚øćƒ§'}], 
                        [{c:'bya',h:'ć³ć‚ƒ',k:'ćƒ“ćƒ£'},{c:'byu',h:'びゅ',k:'ćƒ“ćƒ„'},{c:'byo',h:'びょ',k:'惓惧'}], 
                        [{c:'pya',h:'ć“ć‚ƒ',k:'ćƒ”ćƒ£'},{c:'pyu',h:'恓悅',k:'ćƒ”ćƒ„'},{c:'pyo',h:'恓悇',k:'惔惧'}] 
                    ],
                    romajiDiff1: [
                        { h: '恗', hebon: 'S<span class="diff-highlight">H</span>I', kunrei: '<span class="kunrei-highlight">S</span>I' },
                        { h: '恔', hebon: '<span class="diff-highlight">C</span>HI', kunrei: '<span class="kunrei-highlight">T</span>I' },
                        { h: '恤', hebon: 'T<span class="diff-highlight">S</span>U', kunrei: '<span class="kunrei-highlight">TU</span>' },
                        { h: '恵', hebon: '<span class="diff-highlight">F</span>U', kunrei: '<span class="kunrei-highlight">H</span>U' },
                        { h: '恘', hebon: '<span class="diff-highlight">J</span>I', kunrei: '<span class="kunrei-highlight">Z</span>I' },
                        { h: 'ぢ', hebon: '<span class="diff-highlight">J</span>I', kunrei: '<span class="kunrei-highlight">Z</span>I' },
                        { h: '恄', hebon: 'ZU', kunrei: 'ZU' }
                    ],
                    romajiDiff2_col1: [
                        { h: '恗悃', hebon: 'S<span class="diff-highlight">H</span>A', kunrei: 'S<span class="kunrei-highlight">Y</span>A' },
                        { h: '恗悅', hebon: 'S<span class="diff-highlight">H</span>U', kunrei: 'S<span class="kunrei-highlight">Y</span>U' },
                        { h: '恗悇', hebon: 'S<span class="diff-highlight">H</span>O', kunrei: 'S<span class="kunrei-highlight">Y</span>O' },
                        { h: '恘悃', hebon: '<span class="diff-highlight">J</span>A', kunrei: '<span class="kunrei-highlight">ZY</span>A' },
                        { h: '恘悅', hebon: '<span class="diff-highlight">J</span>U', kunrei: '<span class="kunrei-highlight">ZY</span>U' },
                        { h: '恘悇', hebon: '<span class="diff-highlight">J</span>O', kunrei: '<span class="kunrei-highlight">ZY</span>O' }
                    ],
                    romajiDiff2_col2: [
                        { h: 'ć”ć‚ƒ', hebon: '<span class="diff-highlight">CH</span>A', kunrei: '<span class="kunrei-highlight">TY</span>A' },
                        { h: '恔悅', hebon: '<span class="diff-highlight">CH</span>U', kunrei: '<span class="kunrei-highlight">TY</span>U' },
                        { h: '恔悇', hebon: '<span class="diff-highlight">CH</span>O', kunrei: '<span class="kunrei-highlight">TY</span>O' },
                        { h: 'ć¢ć‚ƒ', hebon: '<span class="diff-highlight">J</span>A', kunrei: '<span class="kunrei-highlight">ZY</span>A' },
                        { h: 'ぢゅ', hebon: '<span class="diff-highlight">J</span>U', kunrei: '<span class="kunrei-highlight">ZY</span>U' },
                        { h: 'ぢょ', hebon: '<span class="diff-highlight">J</span>O', kunrei: '<span class="kunrei-highlight">ZY</span>O' }
                    ]
                },
                numbers: { 
                    arabic: ['1','2','3','4','5','6','7','8','9','0'], 
                    kanji: [ 
                        [{c:'äø€',r:'恄恔',n:'1'},{c:'二',r:'恫',n:'2'},{c:'äø‰',r:'恕悓',n:'3'}], 
                        [{c:'四',r:'悈悓',n:'4'},{c:'äŗ”',r:'恔',n:'5'},{c:'六',r:'悍恏',n:'6'}], 
                        [{c:'七',r:'なな',n:'7'},{c:'八',r:'はご',n:'8'},{c:'九',r:'恍悅恆',n:'9'}], 
                        [{c:'十',r:'恘悅恆',n:'10'},{c:'百',r:'ć²ć‚ƒć',n:'100'},{c:'千',r:'恛悓',n:'1000'}], 
                        [{c:'äø‡',r:'まん',n:'10000'},{c:'怇',r:'恜悍',n:'0'},{c:'円',r:'恈悓',n:'Ā„'}] 
                    ] 
                }
            };
    
            window.onload = () => { 
                renderPages(); 
                applyLanguage(); 
                updatePageDisplay(); 
                initDrawing(); 
                updateNavigation(); 
                updateCursor(); 
                initPanAndZoom(); 
            };
    
            function stopSpeaking() { 
                if ('speechSynthesis' in window) speechSynthesis.cancel(); 
            }
            
            function speakText(text, forceLang = null) {
                if (!('speechSynthesis' in window)) return;
                // čØ˜å·ć‚„ē‰¹å®šć®å˜čŖžć‚’č‡Ŗē„¶ć«čŖ­ć‚ć‚‹ć‚ˆć†ć«ē½®ćę›ćˆļ¼ˆć€Œåø³ć€å•é”ŒćŖć©ć®å›žéæļ¼‰
                let cleanText = text.replace(/[※\*]/g, '')
                                    .replace(/Ɨ/g, '')
                                    .replace(/→/g, '态') // ć€Œć¤ćŽć«ć€ć§ćÆćŖćčŖ­ē‚¹ć«ć—ć¦äø€å‘¼åøē½®ć
                                    .replace(/怜/g, '恋悉')
                                    .replace(/蔌/g, '恎悇恆')
                                    .replace(/åŠęæéŸ³/g, 'ćÆć‚“ć ććŠć‚“')
                                    .replace(/濁音/g, '恠恏恊悓')
                                    .replace(/ę‹—éŸ³/g, '悈恆恊悓')
                                    .replace(/č‹±čŖžč©±č€…/g, '恈恄恔悏恗悃')
                                    .replace(/ē·“ēæ’åø³/g, 'ć‚Œć‚“ć—ć‚…ć†ć”ć‚‡ć†')
                                    .replace(/åø³/g, '恔悇恆')
                                    .replace(/\//g, '态') 
                                    .replace(/:/g, 'は、') 
                                    .replace(/šŸ‘‰/g, ''); 
    
                // ćƒšćƒ¼ć‚øå…Øä½“ć®čŖ¬ę˜Žę–‡ćŖć©ć§ć€ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆć®é€£ē¶šć‚’å˜čŖžčŖ­ćæć§ćÆćŖć1ę–‡å­—ćšć¤ļ¼ˆć‚¹ćƒšćƒ«ļ¼‰čŖ­ć¾ć›ć‚‹
                cleanText = cleanText.replace(/[A-Z]{2,}/g, match => {
                    return match.split('').join(', ').toLowerCase();
                });
                                    
                const msg = new SpeechSynthesisUtterance(cleanText);
                msg.lang = forceLang ? forceLang : (currentLang === 'en' ? 'en-US' : 'ja-JP');
                msg.rate = 0.85; 
                speechSynthesis.speak(msg);
            }
    
            function speakChar(char, forceLang = null) {
                const now = Date.now(); 
                if (char === lastSpokenChar && (now - lastSpokenTime) < 1500) return; 
                
                lastSpokenChar = char; 
                lastSpokenTime = now; 
                stopSpeaking();
                
                let textToSpeak = char;
                
                // ę—„ęœ¬čŖžć®åŠ©č©žć®čŖ­ćæę–¹ć®čŖæę•“
                if (char === 'は') textToSpeak = '惏'; 
                if (char === 'へ') textToSpeak = 'ヘ';
    
                // ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆ1ę–‡å­—ć®ć‚æćƒƒćƒ—ę™‚ć«ć€Œć‚­ćƒ£ćƒ”ć‚æćƒ«ć€œć€ćØčŖ­ć¾ć‚Œć‚‹ć®ć‚’å›žéæć™ć‚‹ćŸć‚ć€å°ę–‡å­—ć«ć—ć¦ć‹ć‚‰ęø”ć™
                if (forceLang === 'en-US' && textToSpeak.length === 1 && /[A-Z]/.test(textToSpeak)) {
                    textToSpeak = textToSpeak.toLowerCase();
                }
                
                speakText(textToSpeak, forceLang || 'ja-JP');
            }
    
            function speakCurrentPage() { 
                const page = document.querySelector('.page.active'); 
                if (page) speakPageInfo(page); 
            }
            
            function speakPageInfo(page) {
                if (!page) return; 
                stopSpeaking(); 
                
                let speechQueue = []; 
                const mainLang = currentLang === 'en' ? 'en-US' : 'ja-JP';
                
                const mainTitle = page.querySelector('.main-title');
                if (mainTitle) {
                    const badge = mainTitle.querySelector('.step-badge'); 
                    const textSpan = mainTitle.querySelector('span[data-i18n]');
                    if (badge) speechQueue.push({ text: badge.innerText, lang: mainLang });
                    if (textSpan) speechQueue.push({ text: textSpan.innerText, lang: mainLang });
                }
                
                if (currentScript === 'alphabet' && currentPage >= 9) {
                    // Step 9, 10 ē”Øć®čŖ¬ę˜Žę–‡ćØę–‡å­—ćƒŖć‚¹ćƒˆć®čŖ­ćæäøŠć’
                    const diffCards = page.querySelectorAll('.diff-card');
                    diffCards.forEach(card => {
                        const h4 = card.querySelector('h4');
                        const p = card.querySelector('p');
                        if (h4) speechQueue.push({ text: h4.innerText, lang: mainLang });
                        if (p) speechQueue.push({ text: p.innerText, lang: mainLang });
                    });
    
                    const prefix = currentLang === 'en' ? "Characters are: " : "ć“ć®ćƒšćƒ¼ć‚øć®ę–‡å­—ćÆć€"; 
                    speechQueue.push({ text: prefix, lang: mainLang });
                    let chars = [];
                    page.querySelectorAll('.diff-row .diff-col-kana').forEach(cell => {
                        const char = cell.innerText.trim();
                        if(char && char !== 'かな' && char !== 'Kana' && !chars.includes(char)) {
                            chars.push(char);
                        }
                    });
                    speechQueue.push({ text: chars.join('态'), lang: 'ja-JP' });
    
                } else if (currentScript === 'alphabet') {
                    const prefix = currentLang === 'en' ? "Characters are: " : "ć“ć®ćƒšćƒ¼ć‚øć®ę–‡å­—ćÆć€"; 
                    speechQueue.push({ text: prefix, lang: mainLang });
                    let chars = [];
                    page.querySelectorAll('.char-block[data-char]').forEach(block => {
                        const char = block.getAttribute('data-char');
                        if(char && !chars.includes(char)) chars.push(char);
                    });
                    
                    if (currentPage === 1 || currentPage === 2) {
                        // ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆå˜ä½“ć®čŖ¤čŖ­ć‚’é˜²ććŸć‚ć€ć‚«ćƒ³ćƒžćØć‚¹ćƒšćƒ¼ć‚¹ć§å®Œå…Øć«åŒŗåˆ‡ć‚‹
                        // å¤§ę–‡å­—ć®ćƒšćƒ¼ć‚øļ¼ˆcurrentPage === 1ļ¼‰ć®å “åˆć‚‚ć€Œć‚­ćƒ£ćƒ”ć‚æćƒ«ć€å›žéæć®ćŸć‚å°ę–‡å­—ć«ć™ć‚‹
                        if (currentPage === 1) {
                            chars = chars.map(c => c.toLowerCase());
                        }
                        speechQueue.push({ text: chars.join(', '), lang: 'en-US' });
                    } else {
                        speechQueue.push({ text: chars.join('态'), lang: 'ja-JP' });
                    }
                    
                } else if ((currentScript === 'hiragana' || currentScript === 'katakana') && (currentPage === 7 || currentPage === 8)) {
                    const prefix = currentLang === 'en' ? "Characters are: " : "ć“ć®ćƒšćƒ¼ć‚øć®ę–‡å­—ćÆć€"; 
                    speechQueue.push({ text: prefix, lang: mainLang });
                    let chars = []; 
                    charsData[currentScript].aiueo.forEach(group => { 
                        group.forEach(char => { if (char !== '') chars.push(char); }); 
                    });
                    speechQueue.push({ text: chars.join('态'), lang: 'ja-JP' });
    
                } else if (currentPage >= 2 && currentScript !== 'numbers') {
                    const charBlocks = page.querySelectorAll('.char-block[data-char]');
                    if (charBlocks.length > 0) {
                        const prefix = currentLang === 'en' ? "Characters are: " : "ć“ć®ćƒšćƒ¼ć‚øć®ę–‡å­—ćÆć€"; 
                        speechQueue.push({ text: prefix, lang: mainLang });
                        let chars = []; 
                        charBlocks.forEach(block => { 
                            const char = block.getAttribute('data-ruby') || block.getAttribute('data-char'); 
                            if(char) chars.push(char); 
                        });
                        speechQueue.push({ text: chars.join('态'), lang: 'ja-JP' });
                    }
                } else if (currentPage === 1 && currentScript !== 'numbers') {
                    const stepTitles = page.querySelectorAll('.step-title-small'); 
                    const containers = page.querySelectorAll('.blocks-container');
                    stepTitles.forEach((stepTitle, idx) => {
                        const badge = stepTitle.querySelector('.step-badge'); 
                        const textSpan = stepTitle.querySelector('span[data-i18n]');
                        if (badge) speechQueue.push({ text: badge.innerText, lang: mainLang });
                        if (textSpan) speechQueue.push({ text: textSpan.innerText, lang: mainLang });
                        
                        const container = containers[idx];
                        if (container) {
                            let chars = []; 
                            container.querySelectorAll('.char-block[data-char]').forEach(block => { 
                                const char = block.getAttribute('data-char'); 
                                if(char) chars.push(char); 
                            });
                            if (chars.length > 0) speechQueue.push({ text: chars.join('态'), lang: 'ja-JP' });
                        }
                    });
                }
    
                speechQueue.forEach(item => { 
                    const punctuation = item.lang === 'en-US' ? '.' : '怂'; 
                    let textToSpeak = item.text; 
                    if (!textToSpeak.endsWith(punctuation)) textToSpeak += punctuation; 
                    speakText(textToSpeak, item.lang); 
                });
            }
    
            function getTotalPages() { 
                if (currentScript === 'numbers') return 2; 
                if (currentScript === 'alphabet') return 10; 
                return 8; 
            }
    
            function setScriptMode(mode) {
                if (mode === 'kana') { 
                    if (currentScript === 'hiragana' || currentScript === 'katakana') { 
                        currentScript = currentScript === 'hiragana' ? 'katakana' : 'hiragana'; 
                        lastKana = currentScript; 
                    } else { 
                        currentScript = lastKana; 
                        currentPage = lastKanaPage; 
                    } 
                } 
                else if (mode === 'alphabet') { 
                    if (currentScript !== 'alphabet') { 
                        if (currentScript === 'hiragana' || currentScript === 'katakana') lastKanaPage = currentPage; 
                        currentScript = 'alphabet'; 
                        currentPage = 1; 
                    } 
                } 
                else if (mode === 'numbers') { 
                    if (currentScript !== 'numbers') { 
                        if (currentScript === 'hiragana' || currentScript === 'katakana') lastKanaPage = currentPage; 
                        currentScript = 'numbers'; 
                        currentPage = 1; 
                    } 
                }
                updatePageDisplay(); 
                applyLanguage();
            }
    
            function toggleHand() { 
                currentHand = currentHand === 'left' ? 'right' : 'left'; 
                document.body.classList.toggle('left-hand', currentHand === 'left'); 
                document.body.classList.toggle('right-hand', currentHand === 'right'); 
                applyLanguage(); 
            }
    
            function toggleLang() { 
                currentLang = currentLang === 'jp' ? 'en' : 'jp'; 
                applyLanguage(); 
            }
    
            function applyLanguage() {
                document.querySelectorAll('[data-i18n]').forEach(el => {
                    const keys = el.getAttribute('data-i18n').split('.'); 
                    let val = i18n[currentLang];
                    for (const k of keys) { if (val) val = val[k]; }
                    if (val) { 
                        if (typeof val === 'object') el.innerHTML = val[currentHand] || val; 
                        else el.innerHTML = val; 
                    }
                });
                
                const handBtn = document.getElementById('hand-toggle-btn');
                if (handBtn) { 
                    const text = i18n[currentLang].common[`hand_${currentHand}`]; 
                    if (currentHand === 'left') { 
                        handBtn.innerHTML = `<i class="fa-solid fa-hand"></i> <span>${text}</span>`; 
                    } else { 
                        handBtn.innerHTML = `<span>${text}</span> <i class="fa-solid fa-hand"></i>`; 
                    } 
                }
                
                const kanaBtnText = document.getElementById('kana-btn-text');
                if (kanaBtnText) { 
                    const targetScript = (currentScript === 'hiragana' || currentScript === 'katakana') ? currentScript : lastKana; 
                    kanaBtnText.innerText = i18n[currentLang].common[`script_${targetScript}`]; 
                }
                
                document.getElementById('jump-v-text').innerText = currentScript === 'katakana' ? 'ć‚¢' : '恂'; 
                document.getElementById('jump-h-text').innerText = currentScript === 'katakana' ? 'ć‚¢' : '恂';
            }
    
            function renderPages() {
                const container = document.getElementById('pages-container'); 
                container.innerHTML = ''; 
                
                // --- ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠ ---
                ['hiragana', 'katakana'].forEach(script => {
                    const sData = charsData[script].steps; 
                    const aData = charsData[script].aiueo;
                    
                    let page1 = `<div id="page-${script}-1" class="page"><h1 class="main-title"><span data-i18n="${script}.title_main"></span></h1><div class="summary-wrapper">`;
                    sData.forEach((data, i) => {
                        let mt = i > 0 ? 'margin-top: 18px;' : 'margin-top: 16px;';
                        page1 += `<div class="step-title-small" style="${mt}"><span class="step-badge">Step ${i+1}</span> <span data-i18n="${script}.step${i+1}_title"></span></div><div class="blocks-container compact">`;
                        data.chars.forEach(char => { 
                            page1 += `<div class="char-block compact" data-char="${char}">
                                <div class="cell compact sample" onclick="speakChar('${char}')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                                <div class="cell compact trace"><span class="main-char">${char}</span><canvas data-size="43"></canvas></div>
                                <div class="cell compact"><canvas data-size="43"></canvas></div>
                            </div>`; 
                        });
                        page1 += `</div>`;
                    });
                    page1 += `</div></div>`; 
                    container.insertAdjacentHTML('beforeend', page1);
    
                    sData.forEach((data, index) => {
                        let pageHtml = `<div id="page-${script}-${index+2}" class="page"><h1 class="main-title"><span class="step-badge large">Step ${index+1}</span> <span data-i18n="${script}.step${index+1}_title"></span></h1><div class="blocks-container step-layout">`;
                        data.chars.forEach(char => { 
                            pageHtml += `<div class="char-block step" data-char="${char}">
                                <div class="cell step sample" onclick="speakChar('${char}')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                                <div class="cell step trace"><span class="main-char">${char}</span><canvas data-size="105"></canvas></div>
                                <div class="cell step"><canvas data-size="105"></canvas></div>
                            </div>`; 
                        });
                        pageHtml += `</div></div>`; 
                        container.insertAdjacentHTML('beforeend', pageHtml);
                    });
    
                    let page7 = `<div id="page-${script}-7" class="page"><h1 class="main-title"><span data-i18n="${script}.title_aiueo_v"></span></h1><div class="vertical-layout">`; 
                    for(let i=0; i<5; i++){ 
                        page7 += `<div class="column-group">`; 
                        aData[i].forEach(char => { 
                            if(char === '') {
                                page7 += `<div class="char-block aiueo" style="visibility: hidden;"><div class="cell aiueo"></div><div class="cell aiueo"></div><div class="cell aiueo"></div></div>`; 
                            } else {
                                page7 += `<div class="char-block aiueo" data-char="${char}">
                                    <div class="cell aiueo sample" onclick="speakChar('${char}')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                                    <div class="cell aiueo trace"><span class="main-char">${char}</span><canvas data-size="54"></canvas></div>
                                    <div class="cell aiueo"><canvas data-size="54"></canvas></div>
                                </div>`; 
                            }
                        }); 
                        page7 += `</div>`; 
                    }
                    page7 += `</div><div class="vertical-layout" style="margin-top: 40px;">`; 
                    for(let i=5; i<10; i++){ 
                        page7 += `<div class="column-group">`; 
                        aData[i].forEach(char => { 
                            if(char === '') {
                                page7 += `<div class="char-block aiueo" style="visibility: hidden;"><div class="cell aiueo"></div><div class="cell aiueo"></div><div class="cell aiueo"></div></div>`; 
                            } else {
                                page7 += `<div class="char-block aiueo" data-char="${char}">
                                    <div class="cell aiueo sample" onclick="speakChar('${char}')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                                    <div class="cell aiueo trace"><span class="main-char">${char}</span><canvas data-size="54"></canvas></div>
                                    <div class="cell aiueo"><canvas data-size="54"></canvas></div>
                                </div>`; 
                            }
                        }); 
                        page7 += `</div>`; 
                    }
                    page7 += `</div></div>`; 
                    container.insertAdjacentHTML('beforeend', page7);
    
                    let page8 = `<div id="page-${script}-8" class="page"><h1 class="main-title"><span data-i18n="${script}.title_aiueo_h"></span></h1><div class="horizontal-layout">`;
                    aData.forEach((group, idx) => { 
                        let mt = (idx === 5) ? 'margin-top: 24px;' : ''; 
                        page8 += `<div class="row-group" style="${mt}">`; 
                        group.forEach(char => { 
                            if(char === '') {
                                page8 += `<div class="char-block aiueo" style="visibility: hidden;"><div class="cell aiueo"></div><div class="cell aiueo"></div><div class="cell aiueo"></div></div>`; 
                            } else {
                                page8 += `<div class="char-block aiueo" data-char="${char}">
                                    <div class="cell aiueo sample" onclick="speakChar('${char}')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                                    <div class="cell aiueo trace"><span class="main-char">${char}</span><canvas data-size="54"></canvas></div>
                                    <div class="cell aiueo"><canvas data-size="54"></canvas></div>
                                </div>`; 
                            }
                        }); 
                        page8 += `</div>`; 
                    });
                    page8 += `</div></div>`; 
                    container.insertAdjacentHTML('beforeend', page8);
                });
    
                // --- ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆ ---
                let pageAlphabet1 = `<div id="page-alphabet-1" class="page"><h1 class="main-title"><span class="step-badge large">Step 1</span> <span data-i18n="alphabet.step1_title"></span></h1><div class="blocks-container alphabet-layout">`;
                charsData.alphabet.uppercase.forEach(row => { 
                    pageAlphabet1 += `<div class="row-group">`; 
                    row.forEach(char => { 
                        pageAlphabet1 += `<div class="char-block alphabet" data-char="${char}">
                            <div class="cell alphabet sample" onclick="speakChar('${char}', 'en-US')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                            <div class="cell alphabet trace"><span class="main-char">${char}</span><canvas data-size="44"></canvas></div>
                            <div class="cell alphabet"><canvas data-size="44"></canvas></div>
                        </div>`; 
                    }); 
                    pageAlphabet1 += `</div>`; 
                });
                pageAlphabet1 += `</div></div>`; 
                container.insertAdjacentHTML('beforeend', pageAlphabet1);
    
                let pageAlphabet2 = `<div id="page-alphabet-2" class="page"><h1 class="main-title"><span class="step-badge large">Step 2</span> <span data-i18n="alphabet.step2_title"></span></h1><div class="blocks-container alphabet-layout">`;
                charsData.alphabet.lowercase.forEach(row => { 
                    pageAlphabet2 += `<div class="row-group">`; 
                    row.forEach(char => { 
                        pageAlphabet2 += `<div class="char-block alphabet" data-char="${char}">
                            <div class="cell alphabet sample" onclick="speakChar('${char}', 'en-US')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${char}</span></div>
                            <div class="cell alphabet trace"><span class="main-char">${char}</span><canvas data-size="44"></canvas></div>
                            <div class="cell alphabet"><canvas data-size="44"></canvas></div>
                        </div>`; 
                    }); 
                    pageAlphabet2 += `</div>`; 
                });
                pageAlphabet2 += `</div></div>`; 
                container.insertAdjacentHTML('beforeend', pageAlphabet2);
    
                const romajiPages = [ 
                    { id: 3, data: charsData.alphabet.romaji1 }, { id: 4, data: charsData.alphabet.romaji2 }, 
                    { id: 5, data: charsData.alphabet.romaji3 }, { id: 6, data: charsData.alphabet.romaji4 }, 
                    { id: 7, data: charsData.alphabet.romaji5 }, { id: 8, data: charsData.alphabet.romaji6 } 
                ];
                
                romajiPages.forEach(pageInfo => {
                    const isYoon = (pageInfo.id >= 6); 
                    const blockClass = isYoon ? "char-block romaji-yoon" : "char-block romaji"; 
                    const cellClass = isYoon ? "cell romaji-yoon" : "cell romaji"; 
                    const canvasSize = isYoon ? 96 : 64;
                    
                    let html = `<div id="page-alphabet-${pageInfo.id}" class="page"><h1 class="main-title"><span class="step-badge large">Step ${pageInfo.id}</span> <span data-i18n="alphabet.step${pageInfo.id}_title"></span></h1><div class="blocks-container alphabet-layout">`; 
                    pageInfo.data.forEach(row => {
                        let rowStyle = ""; 
                        if (!isYoon && row.length === 3) rowStyle = 'style="gap: 50px;"';
                        
                        html += `<div class="row-group" ${rowStyle}>`;
                        row.forEach(item => {
                            if (!item) {
                                html += `<div class="${blockClass}" style="visibility: hidden;"><div class="${cellClass}"></div><div class="${cellClass}"></div><div class="${cellClass}"></div></div>`;
                            } else {
                                let rawC = item.c.replace(/<[^>]*>?/gm, ''); // ćŖćžć‚Šę›øćē”ØćÆć‚æć‚°ć‚’é™¤å¤–ć—ćŸę–‡å­—åˆ—
                                html += `<div class="${blockClass}" data-char="${item.h}">
                                    <div class="${cellClass} sample" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹">
                                        <div class="romaji-kana"><span>${item.h}</span><span>${item.k}</span></div>
                                        <span class="main-char">${item.c}</span>
                                    </div>
                                    <div class="${cellClass} trace"><span class="main-char">${rawC}</span><canvas data-size="${canvasSize}"></canvas></div>
                                    <div class="${cellClass}"><canvas data-size="${canvasSize}"></canvas></div>
                                </div>`;
                            }
                        }); 
                        html += `</div>`;
                    }); 
                    html += `</div></div>`; 
                    container.insertAdjacentHTML('beforeend', html);
                });
    
                // --- Step 9 (ćƒ˜ćƒœćƒ³å¼ vs čØ“ä»¤å¼ļ¼šå­éŸ³) ---
                let pageAlphabet9 = `<div id="page-alphabet-9" class="page">
                    <h1 class="main-title"><span class="step-badge large">Step 9</span> <span data-i18n="alphabet.step9_title"></span></h1>
                    <div class="diff-page-container">
                        <div class="diff-text-area">
                            <div class="diff-card hebon-card"><h4 data-i18n="alphabet.diff_hebon_title"></h4><p data-i18n="alphabet.diff_hebon_desc"></p></div>
                            <div class="diff-card kunrei-card"><h4 data-i18n="alphabet.diff_kunrei_title"></h4><p data-i18n="alphabet.diff_kunrei_desc"></p></div>
                            <div class="diff-card note-card"><h4 data-i18n="alphabet.diff_note_title"></h4><p data-i18n="alphabet.diff_note_1"></p></div>
                        </div>
                        <div class="diff-practice-area">
                            <div class="diff-table-header"><div class="diff-col-kana" data-i18n="common.kana">かな</div><div class="diff-col-hebon" data-i18n="common.hebon">ćƒ˜ćƒœćƒ³å¼</div><div class="diff-col-kunrei" data-i18n="common.kunrei">čØ“ä»¤å¼</div></div>`;
                
                charsData.alphabet.romajiDiff1.forEach(item => {
                    let rawHebon = item.hebon.replace(/<[^>]*>?/gm, ''); 
                    let rawKunrei = item.kunrei.replace(/<[^>]*>?/gm, '');
    
                    pageAlphabet9 += `<div class="diff-row"><div class="diff-col-kana">${item.h}</div>
                        <div class="diff-col-hebon"><div class="char-block romaji diff-block" data-char="${item.h}">
                            <div class="cell romaji sample diff-cell" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${item.hebon}</span></div>
                            <div class="cell romaji trace diff-cell"><span class="main-char">${rawHebon}</span><canvas data-size="52"></canvas></div><div class="cell romaji diff-cell"><canvas data-size="52"></canvas></div></div></div>
                        <div class="diff-col-kunrei"><div class="char-block romaji diff-block" data-char="${item.h}">
                            <div class="cell romaji sample diff-cell" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${item.kunrei}</span></div>
                            <div class="cell romaji trace diff-cell"><span class="main-char">${rawKunrei}</span><canvas data-size="52"></canvas></div><div class="cell romaji diff-cell"><canvas data-size="52"></canvas></div></div></div></div>`;
                });
                pageAlphabet9 += `</div></div></div>`; 
                container.insertAdjacentHTML('beforeend', pageAlphabet9);
    
                // --- Step 10 (ćƒ˜ćƒœćƒ³å¼ vs čØ“ä»¤å¼ļ¼šę‹—éŸ³) ---
                let pageAlphabet10 = `<div id="page-alphabet-10" class="page">
                    <h1 class="main-title"><span class="step-badge large">Step 10</span> <span data-i18n="alphabet.step10_title"></span></h1>
                    <div class="diff-page-container">
                        <div class="diff-text-area" style="width: 330px;"><div class="diff-card note-card" style="height: 100%;"><h4 data-i18n="alphabet.diff_note_title"></h4><p data-i18n="alphabet.diff_note_2" style="margin-top: 10px;"></p></div></div>
                        <div class="diff-practice-area" style="display: flex; gap: 15px; padding: 12px 14px;">
                            <div style="flex: 1;"><div class="diff-table-header small"><div class="diff-col-kana" data-i18n="common.kana">かな</div><div class="diff-col-hebon" data-i18n="common.hebon">ćƒ˜ćƒœćƒ³å¼</div><div class="diff-col-kunrei" data-i18n="common.kunrei">čØ“ä»¤å¼</div></div>`;
                
                charsData.alphabet.romajiDiff2_col1.forEach(item => {
                    let rawHebon = item.hebon.replace(/<[^>]*>?/gm, ''); 
                    let rawKunrei = item.kunrei.replace(/<[^>]*>?/gm, '');
    
                    pageAlphabet10 += `<div class="diff-row"><div class="diff-col-kana">${item.h}</div>
                        <div class="diff-col-hebon"><div class="char-block romaji diff-block" data-char="${item.h}">
                            <div class="cell romaji sample diff-cell small" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${item.hebon}</span></div>
                            <div class="cell romaji trace diff-cell small"><span class="main-char">${rawHebon}</span><canvas data-size="46"></canvas></div><div class="cell romaji diff-cell small"><canvas data-size="46"></canvas></div></div></div>
                        <div class="diff-col-kunrei"><div class="char-block romaji diff-block" data-char="${item.h}">
                            <div class="cell romaji sample diff-cell small" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${item.kunrei}</span></div>
                            <div class="cell romaji trace diff-cell small"><span class="main-char">${rawKunrei}</span><canvas data-size="46"></canvas></div><div class="cell romaji diff-cell small"><canvas data-size="46"></canvas></div></div></div></div>`;
                });
                pageAlphabet10 += `</div><div style="flex: 1;"><div class="diff-table-header small"><div class="diff-col-kana" data-i18n="common.kana">かな</div><div class="diff-col-hebon" data-i18n="common.hebon">ćƒ˜ćƒœćƒ³å¼</div><div class="diff-col-kunrei" data-i18n="common.kunrei">čØ“ä»¤å¼</div></div>`;
                
                charsData.alphabet.romajiDiff2_col2.forEach(item => {
                    let rawHebon = item.hebon.replace(/<[^>]*>?/gm, ''); 
                    let rawKunrei = item.kunrei.replace(/<[^>]*>?/gm, '');
    
                    pageAlphabet10 += `<div class="diff-row"><div class="diff-col-kana">${item.h}</div>
                        <div class="diff-col-hebon"><div class="char-block romaji diff-block" data-char="${item.h}">
                            <div class="cell romaji sample diff-cell small" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${item.hebon}</span></div>
                            <div class="cell romaji trace diff-cell small"><span class="main-char">${rawHebon}</span><canvas data-size="46"></canvas></div><div class="cell romaji diff-cell small"><canvas data-size="46"></canvas></div></div></div>
                        <div class="diff-col-kunrei"><div class="char-block romaji diff-block" data-char="${item.h}">
                            <div class="cell romaji sample diff-cell small" onclick="speakChar('${item.h}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${item.kunrei}</span></div>
                            <div class="cell romaji trace diff-cell small"><span class="main-char">${rawKunrei}</span><canvas data-size="46"></canvas></div><div class="cell romaji diff-cell small"><canvas data-size="46"></canvas></div></div></div></div>`;
                });
                pageAlphabet10 += `</div></div></div></div>`; 
                container.insertAdjacentHTML('beforeend', pageAlphabet10);
    
                // --- ę•°å­—ćƒ»ę¼¢ę•°å­— ---
                let pageNum1 = `<div id="page-numbers-1" class="page"><h1 class="main-title"><span class="step-badge large">Step 1</span> <span data-i18n="numbers.step1_title"></span></h1><div class="blocks-container numbers-layout">`;
                charsData.numbers.arabic.forEach(num => { 
                    pageNum1 += `<div class="char-block numbers-block" data-char="${num}">
                        <div class="cell numbers-cell sample" onclick="speakChar('${num}')" title="čŖ­ćæäøŠć’ć‚‹"><span class="main-char">${num}</span></div>
                        <div class="cell numbers-cell trace"><span class="main-char">${num}</span><canvas data-size="105"></canvas></div>
                        <div class="cell numbers-cell"><canvas data-size="105"></canvas></div>
                    </div>`; 
                });
                pageNum1 += `</div></div>`; 
                container.insertAdjacentHTML('beforeend', pageNum1);
    
                let pageNum2 = `<div id="page-numbers-2" class="page"><h1 class="main-title"><span class="step-badge large">Step 2</span> <span data-i18n="numbers.step2_title"></span></h1><div class="blocks-container kanji-layout">`;
                charsData.numbers.kanji.forEach(row => { 
                    row.forEach(item => { 
                        pageNum2 += `<div class="char-block kanji" data-char="${item.c}" data-ruby="${item.r}">
                            <div class="cell kanji sample" onclick="speakChar('${item.r}', 'ja-JP')" title="čŖ­ćæäøŠć’ć‚‹"><div class="kanji-ruby">${item.r}</div><span class="main-char">${item.c}</span><div class="kanji-num">${item.n}</div></div>
                            <div class="cell kanji trace"><span class="main-char">${item.c}</span><canvas data-size="105"></canvas></div>
                            <div class="cell kanji"><canvas data-size="105"></canvas></div>
                        </div>`; 
                    }); 
                });
                pageNum2 += `</div></div>`; 
                container.insertAdjacentHTML('beforeend', pageNum2);
            }
    
            function updatePageDisplay() { 
                document.querySelectorAll('.page').forEach(p => p.classList.remove('active')); 
                document.getElementById(`page-${currentScript}-${currentPage}`).classList.add('active'); 
                updateNavigation(); 
                applyZoom(); 
            }
    
            // ć‚ŗćƒ¼ćƒ ę“ä½œé–¢ę•°ē¾¤
            function changeZoom(delta) { 
                currentZoom += delta; 
                if(currentZoom < 0.5) currentZoom = 0.5; 
                if(currentZoom > 2.5) currentZoom = 2.5; 
                applyZoom(); 
            }
            function resetZoom() { 
                currentZoom = 1.0; 
                applyZoom(); 
            }
            function applyZoom() { 
                const container = document.getElementById('pages-container'); 
                container.style.transform = `scale(${currentZoom})`; 
                const activePage = document.querySelector('.page.active'); 
                if(activePage) { 
                    document.body.style.minHeight = `${(activePage.offsetHeight * currentZoom) + 180}px`; 
                    document.body.style.minWidth = `${activePage.offsetWidth * currentZoom}px`; 
                } 
            }
    
            function changePage(delta) { 
                const total = getTotalPages(); 
                currentPage += delta; 
                if (currentPage < 1) currentPage = 1; 
                if (currentPage > total) currentPage = total; 
                updatePageDisplay(); 
            }
    
            function updateNavigation() { 
                const total = getTotalPages(); 
                const isKana = (currentScript === 'hiragana' || currentScript === 'katakana'); 
                document.getElementById('page-indicator').textContent = `${currentPage} / ${total}`; 
                document.getElementById('prev-btn').disabled = currentPage === 1; 
                document.getElementById('next-btn').disabled = currentPage === total; 
                document.querySelectorAll('.jump-btn').forEach(btn => { btn.style.display = isKana ? 'flex' : 'none'; }); 
            }
            
            function goToTop() { changePage(1 - currentPage); } 
            function jumpToAiueoV() { changePage(7 - currentPage); } 
            function jumpToAiueoH() { changePage(8 - currentPage); } 
    
            function toggleTheme() { 
                document.body.classList.toggle('dark-mode'); 
                const isDark = document.body.classList.contains('dark-mode');
                const icon = document.getElementById('theme-icon'); 
                icon.className = isDark ? 'fa-solid fa-sun' : 'fa-solid fa-moon'; 
                
                // ć™ć§ć«ęć‹ć‚ŒćŸć‚­ćƒ£ćƒ³ćƒć‚¹ć®ē·šć®č‰²ć‚’åč»¢ć•ć›ć‚‹å‡¦ē†ļ¼ˆé»’ā‡”ē™½ļ¼‰
                document.querySelectorAll('canvas').forEach(canvas => {
                    const w = canvas.width; 
                    const h = canvas.height;
                    if(w === 0 || h === 0) return;
                    
                    const ctx = canvas.getContext('2d');
                    const imgData = ctx.getImageData(0, 0, w, h);
                    const data = imgData.data;
                    for (let i = 0; i < data.length; i += 4) {
                        if (data[i+3] > 0) { // é€ę˜Žć§ćŖć„ęē”»ćƒ”ć‚Æć‚»ćƒ«ć‚’åč»¢
                            data[i] = 255 - data[i];
                            data[i+1] = 255 - data[i+1];
                            data[i+2] = 255 - data[i+2];
                        }
                    }
                    ctx.putImageData(imgData, 0, 0);
                });
    
                updateCursor(); 
            }
    
            function setTool(tool) { 
                currentTool = tool; 
                document.getElementById('btn-pen').classList.toggle('active', tool === 'pen'); 
                document.getElementById('btn-eraser').classList.toggle('active', tool === 'eraser'); 
                document.getElementById('btn-move').classList.toggle('active', tool === 'move'); 
                
                const canvases = document.querySelectorAll('canvas'); 
                if (tool === 'move') { 
                    document.body.classList.add('move-mode'); 
                    canvases.forEach(c => c.style.pointerEvents = 'none'); 
                    document.body.style.cursor = 'grab'; 
                } else { 
                    document.body.classList.remove('move-mode'); 
                    canvases.forEach(c => c.style.pointerEvents = 'auto'); 
                    document.body.style.cursor = 'default'; 
                    updateCursor(); 
                } 
            }
            
            function updateCursor() { 
                if(currentTool === 'move') return; 
                const canvases = document.querySelectorAll('canvas'); 
                if (currentTool === 'eraser') { 
                    const size = eraserSize; 
                    const strokeColor = document.body.classList.contains('dark-mode') ? '#fff' : '#000'; 
                    const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}"><circle cx="${size/2}" cy="${size/2}" r="${Math.max(1, size/2 - 1)}" fill="rgba(150,150,150,0.3)" stroke="${strokeColor}" stroke-width="1"/></svg>`; 
                    const dataUrl = `data:image/svg+xml;utf8,${encodeURIComponent(svg)}`; 
                    const offset = Math.floor(size / 2); 
                    canvases.forEach(c => { c.style.cursor = `url('${dataUrl}') ${offset} ${offset}, cell`; }); 
                } else { 
                    canvases.forEach(c => { c.style.cursor = 'crosshair'; }); 
                } 
            }
    
            let isDrawing = false; 
            let currentCtx = null;
            
            function initDrawing() { 
                document.querySelectorAll('canvas').forEach(canvas => { 
                    const size = parseInt(canvas.getAttribute('data-size')); 
                    canvas.width = size * 2; 
                    canvas.height = size * 2; 
                    const ctx = canvas.getContext('2d'); 
                    ctx.scale(2, 2); 
                    canvas.addEventListener('mousedown', startDrawing); 
                    canvas.addEventListener('mousemove', draw); 
                    canvas.addEventListener('mouseup', stopDrawing); 
                    canvas.addEventListener('mouseout', stopDrawing); 
                    canvas.addEventListener('touchstart', startDrawing, {passive: false}); 
                    canvas.addEventListener('touchmove', draw, {passive: false}); 
                    canvas.addEventListener('touchend', stopDrawing, {passive: false}); 
                }); 
            }
    
            function getEventPos(e, canvas) { 
                const rect = canvas.getBoundingClientRect(); 
                const clientX = e.touches ? e.touches[0].clientX : e.clientX; 
                const clientY = e.touches ? e.touches[0].clientY : e.clientY; 
                return { 
                    x: (clientX - rect.left) / currentZoom, 
                    y: (clientY - rect.top) / currentZoom 
                }; 
            }
            
            function startDrawing(e) { 
                if(currentTool === 'move') return; 
                e.preventDefault(); 
                const charBlock = this.closest('.char-block'); 
                if (charBlock) { 
                    const char = charBlock.getAttribute('data-char'); 
                    const ruby = charBlock.getAttribute('data-ruby'); 
                    
                    if (char && char.trim() !== '') { 
                        let lang = 'ja-JP'; 
                        let textToSpeak = ruby ? ruby : char; 
                        // ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆå˜ä½“ć®ćƒšćƒ¼ć‚ø(Step1, 2)ć®ćæč‹±čŖžć‚Øćƒ³ć‚øćƒ³ć§ē™ŗéŸ³
                        if (currentScript === 'alphabet' && [1, 2].includes(currentPage)) lang = 'en-US'; 
                        speakChar(textToSpeak, lang); 
                    } 
                } 
                isDrawing = true; 
                currentCtx = this.getContext('2d'); 
                currentCtx.beginPath(); 
                currentCtx.moveTo(getEventPos(e, this).x, getEventPos(e, this).y); 
            }
    
            function draw(e) { 
                if (!isDrawing || !currentCtx || currentTool === 'move') return; 
                e.preventDefault(); 
                const pos = getEventPos(e, this); 
                currentCtx.lineCap = 'round'; 
                currentCtx.lineJoin = 'round'; 
                
                if (currentTool === 'eraser') { 
                    currentCtx.globalCompositeOperation = 'destination-out'; 
                    currentCtx.lineWidth = eraserSize; 
                    currentCtx.strokeStyle = 'rgba(0,0,0,1)'; 
                } else { 
                    currentCtx.globalCompositeOperation = 'source-over'; 
                    currentCtx.lineWidth = penSize; 
                    const isDark = document.body.classList.contains('dark-mode');
                    currentCtx.strokeStyle = isDark ? '#ffffff' : '#111111'; // ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ę™‚ćÆåøøć«ē™½ć§ęē”»
                } 
                currentCtx.lineTo(pos.x, pos.y); 
                currentCtx.stroke(); 
            }
            
            function stopDrawing(e) { 
                if(e) e.preventDefault(); 
                isDrawing = false; 
                currentCtx = null; 
            }
    
            function initPanAndZoom() {
                let isPanning = false; 
                let startX, startY, scrollLeft, scrollTop; 
                let initialPinchDistance = null; 
                let initialZoomScale = 1.0;
                
                document.addEventListener('mousedown', (e) => { 
                    if (currentTool !== 'move') return; 
                    isPanning = true; 
                    startX = e.pageX - document.documentElement.offsetLeft; 
                    startY = e.pageY - document.documentElement.offsetTop; 
                    scrollLeft = window.scrollX; 
                    scrollTop = window.scrollY; 
                    document.body.style.cursor = 'grabbing'; 
                });
                document.addEventListener('mousemove', (e) => { 
                    if (!isPanning || currentTool !== 'move') return; 
                    e.preventDefault(); 
                    const x = e.pageX - document.documentElement.offsetLeft; 
                    const y = e.pageY - document.documentElement.offsetTop; 
                    window.scrollTo(scrollLeft - (x - startX), scrollTop - (y - startY)); 
                });
                document.addEventListener('mouseup', () => { 
                    isPanning = false; 
                    if(currentTool === 'move') document.body.style.cursor = 'grab'; 
                });
                
                document.addEventListener('touchstart', (e) => { 
                    if (currentTool !== 'move') return; 
                    if (e.touches.length === 1) { 
                        isPanning = true; 
                        startX = e.touches[0].pageX - document.documentElement.offsetLeft; 
                        startY = e.touches[0].pageY - document.documentElement.offsetTop; 
                        scrollLeft = window.scrollX; 
                        scrollTop = window.scrollY; 
                    } else if (e.touches.length === 2) { 
                        isPanning = false; 
                        initialPinchDistance = Math.hypot(e.touches[0].pageX - e.touches[1].pageX, e.touches[0].pageY - e.touches[1].pageY); 
                        initialZoomScale = currentZoom; 
                    } 
                }, {passive: false});
                
                document.addEventListener('touchmove', (e) => { 
                    if (currentTool !== 'move') return; 
                    e.preventDefault(); 
                    if (e.touches.length === 1 && isPanning) { 
                        const x = e.touches[0].pageX - document.documentElement.offsetLeft; 
                        const y = e.touches[0].pageY - document.documentElement.offsetTop; 
                        window.scrollTo(scrollLeft - (x - startX), scrollTop - (y - startY)); 
                    } else if (e.touches.length === 2 && initialPinchDistance) { 
                        const currentDistance = Math.hypot(e.touches[0].pageX - e.touches[1].pageX, e.touches[0].pageY - e.touches[1].pageY); 
                        let newZoom = initialZoomScale * (currentDistance / initialPinchDistance); 
                        if(newZoom < 0.5) newZoom = 0.5; 
                        if(newZoom > 2.5) newZoom = 2.5; 
                        currentZoom = newZoom; 
                        applyZoom(); 
                    } 
                }, {passive: false});
                
                document.addEventListener('touchend', (e) => { 
                    if (e.touches.length < 2) initialPinchDistance = null; 
                    if (e.touches.length === 0) isPanning = false; 
                });
            }
    
            function clearCurrentPage() { 
                clearCanvasesInElement(document.querySelector('.page.active')); 
            }
            function clearAllPages() { 
                document.querySelectorAll(`.page[id^="page-${currentScript}-"]`).forEach(page => clearCanvasesInElement(page)); 
            }
            function clearCanvasesInElement(el) { 
                el.querySelectorAll('canvas').forEach(canvas => { 
                    const ctx = canvas.getContext('2d'); 
                    ctx.save(); 
                    ctx.setTransform(1, 0, 0, 1, 0, 0); 
                    ctx.clearRect(0, 0, canvas.width, canvas.height); 
                    ctx.restore(); 
                }); 
            }
    
            function getDateString() { 
                const d = new Date(); 
                return `${d.getFullYear()}${String(d.getMonth() + 1).padStart(2, '0')}${String(d.getDate()).padStart(2, '0')}`; 
            }
            function getBaseName() { 
                const handStr = currentHand === 'left' ? (currentLang === 'en' ? 'LeftHanded' : '左手用') : (currentLang === 'en' ? 'RightHanded' : 'å³ę‰‹ē”Ø'); 
                let scriptStr = ''; 
                if (currentScript === 'hiragana') scriptStr = currentLang === 'en' ? 'Hiragana' : 'ć²ć‚‰ćŒćŖ'; 
                else if (currentScript === 'katakana') scriptStr = currentLang === 'en' ? 'Katakana' : 'ć‚«ć‚æć‚«ćƒŠ'; 
                else if (currentScript === 'alphabet') scriptStr = currentLang === 'en' ? 'Romaji' : 'ćƒ­ćƒ¼ćƒžå­—'; 
                else scriptStr = currentLang === 'en' ? 'Numbers' : 'ę•°å­—'; 
                
                return currentLang === 'en' ? `${handStr}_${scriptStr}` : `${handStr}_${scriptStr}ē·“ēæ’`; 
            }
            
            async function capturePage(pageEl) { 
                const bgColor = getComputedStyle(document.body).getPropertyValue('--bg-color').trim(); 
                const origRadius = pageEl.style.borderRadius; 
                const origShadow = pageEl.style.boxShadow; 
                pageEl.style.borderRadius = '0'; 
                pageEl.style.boxShadow = 'none'; 
                await new Promise(r => setTimeout(r, 50)); 
                const canvas = await html2canvas(pageEl, { scale: 2, backgroundColor: bgColor, useCORS: true }); 
                pageEl.style.borderRadius = origRadius; 
                pageEl.style.boxShadow = origShadow; 
                return canvas; 
            }
    
            function closeModal() {
                document.getElementById('image-modal').style.display = 'none';
                document.getElementById('modal-images').innerHTML = '';
            }
            
            async function saveCurrentPage() {
                document.getElementById('loading-overlay').style.display = 'flex';
                try {
                    const tempZoom = currentZoom; 
                    resetZoom(); 
                    const format = document.getElementById('save-format').value; 
                    const canvas = await capturePage(document.querySelector('.page.active')); 
                    const fName = `${getBaseName()}_Page${currentPage}_${getDateString()}`;
                    
                    if (format === 'png') { 
                        if (isIOS) {
                            // iOS/iPadOSćÆćƒ¢ćƒ¼ćƒ€ćƒ«ć§ē”»åƒć‚’č”Øē¤ŗć—ć€é•·ęŠ¼ć—äæå­˜ć•ć›ć‚‹
                            const modalImages = document.getElementById('modal-images');
                            modalImages.innerHTML = '';
                            const img = document.createElement('img');
                            img.src = canvas.toDataURL('image/png');
                            modalImages.appendChild(img);
                            document.getElementById('image-modal').style.display = 'flex';
                        } else {
                            // PC悄Androidē­‰ćÆćć®ć¾ć¾ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰
                            const link = document.createElement('a'); 
                            link.download = `${fName}.png`; 
                            link.href = canvas.toDataURL('image/png'); 
                            link.click(); 
                        }
                    } else if (format === 'pdf') { 
                        const { jsPDF } = window.jspdf; 
                        const pdf = new jsPDF({ orientation: 'landscape', format: 'a4' }); 
                        pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, 297, 210); 
                        pdf.save(`${fName}.pdf`); 
                    }
                    currentZoom = tempZoom; 
                    applyZoom();
                } catch (err) { 
                    console.error(err); 
                    alert("Error while saving."); 
                } 
                finally { 
                    document.getElementById('loading-overlay').style.display = 'none'; 
                }
            }
    
            async function saveAllPages() {
                document.getElementById('loading-overlay').style.display = 'flex';
                const format = document.getElementById('save-format').value; 
                const originalPage = currentPage; 
                const tempZoom = currentZoom; 
                resetZoom(); 
                const base = getBaseName(); 
                const allStr = currentLang === 'en' ? 'AllPages' : 'å…Øćƒšćƒ¼ć‚ø'; 
                const dateStr = getDateString(); 
                const total = getTotalPages();
                
                try {
                    let capturedCanvases = [];
                    for (let i = 1; i <= total; i++) { 
                        document.querySelectorAll('.page').forEach(p => p.classList.remove('active')); 
                        const pageEl = document.getElementById(`page-${currentScript}-${i}`); 
                        pageEl.classList.add('active'); 
                        capturedCanvases.push(await capturePage(pageEl)); 
                    }
                    
                    if (format === 'png') { 
                        if (isIOS) {
                            // iOS/iPadOSćÆćƒ¢ćƒ¼ćƒ€ćƒ«ć«å…Øćƒšćƒ¼ć‚øć®ē”»åƒć‚’äø¦ć¹ć¦č”Øē¤ŗć™ć‚‹
                            const modalImages = document.getElementById('modal-images');
                            modalImages.innerHTML = '';
                            for (let idx = 0; idx < capturedCanvases.length; idx++) { 
                                const img = document.createElement('img');
                                img.src = capturedCanvases[idx].toDataURL('image/png');
                                modalImages.appendChild(img);
                            }
                            document.getElementById('image-modal').style.display = 'flex';
                        } else {
                            // PC悄Androidē­‰ćÆćć®ć¾ć¾é€£ē¶šćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰
                            for (let idx = 0; idx < capturedCanvases.length; idx++) { 
                                const link = document.createElement('a'); 
                                link.download = `${base}_Page${idx + 1}_${dateStr}.png`; 
                                link.href = capturedCanvases[idx].toDataURL('image/png'); 
                                link.click(); 
                                await new Promise(r => setTimeout(r, 600)); // é€£ē¶šDLć®ćƒ•ćƒŖćƒ¼ć‚ŗé˜²ę­¢
                            }
                        }
                    } else if (format === 'pdf') { 
                        const { jsPDF } = window.jspdf; 
                        let pdf = null; 
                        capturedCanvases.forEach((cvs, idx) => { 
                            if (idx === 0) pdf = new jsPDF({ orientation: 'landscape', format: 'a4' }); 
                            else pdf.addPage('a4', 'landscape'); 
                            pdf.addImage(cvs.toDataURL('image/png'), 'PNG', 0, 0, 297, 210); 
                        }); 
                        pdf.save(`${base}_${allStr}_${dateStr}.pdf`); 
                    }
                } catch (err) { 
                    console.error(err); 
                    alert("Error while saving."); 
                } 
                finally { 
                    currentPage = originalPage; 
                    updatePageDisplay(); 
                    currentZoom = tempZoom; 
                    applyZoom(); 
                    document.getElementById('loading-overlay').style.display = 'none'; 
                }
            }
        </script>
    </body>
    </html>

    šŸ”‘ć‚³ćƒ¼ćƒ‰ć®č©³ē“°č§£čŖ¬

    ć€Œćƒ–ćƒ©ć‚¦ć‚¶äøŠć§å‹•ćć€ć²ć‚‰ćŒćŖćƒ»ć‚«ć‚æć‚«ćƒŠćƒ»ćƒ­ćƒ¼ćƒžå­—ćƒ»ę•°å­—ć®ę›øćå–ć‚Šē·“ēæ’ć‚¢ćƒ—ćƒŖļ¼ˆSPAļ¼šć‚·ćƒ³ć‚°ćƒ«ćƒšćƒ¼ć‚øć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ļ¼‰ć€ć§ć™ć€‚

    1恤恮HTMLćƒ•ć‚”ć‚¤ćƒ«ć®äø­ć«ć€HTML/CSS/JavaScriptćŒć™ć¹ć¦ć¾ćØć¾ć£ć¦ćŠć‚Šć€ć‚µćƒ¼ćƒćƒ¼ćŖć—ļ¼ˆć‚Ŗćƒ•ćƒ©ć‚¤ćƒ³ļ¼‰ć§ć‚‚å‹•ä½œć™ć‚‹ä½œć‚Šć«ćŖć£ć¦ć„ć¾ć™ć€‚

    ć“ć®ć‚³ćƒ¼ćƒ‰ć®ć™ć”ć„ćØć“ć‚ć‚„ć€ć©ć®ć‚ˆć†ćŖä»•ēµ„ćæć§å‹•ć„ć¦ć„ć‚‹ć®ć‹ć‚’åˆ†ć‹ć‚Šć‚„ć™ćč§£čŖ¬ć—ć¾ć™ļ¼


    šŸŒŸć‚¢ćƒ—ćƒŖć®äø»ćŖē‰¹å¾“ļ¼ˆå®Ÿč£…ć•ć‚Œć¦ć„ć‚‹ę©Ÿčƒ½ļ¼‰

    1. 4ć¤ć®å­¦ēæ’ćƒ¢ćƒ¼ćƒ‰:
      ć²ć‚‰ćŒćŖć€ć‚«ć‚æć‚«ćƒŠć€ćƒ­ćƒ¼ćƒžå­—ć€ę•°å­—

    2. äø”åˆ©ćåÆ¾åæœ:
      å·¦ę‰‹ē”Øćƒ»å³ę‰‹ē”Øć§ę–‡å­—ć®äø¦ć³é †
      ļ¼ˆćŠę‰‹ęœ¬ćØę›øćč¾¼ćæćƒžć‚¹ć®ä½ē½®ļ¼‰ćŒåč»¢ć™ć‚‹

    3. ćŠēµµć‹ćę©Ÿčƒ½:
      ćƒšćƒ³ćƒ»ę¶ˆć—ć‚“ćƒ ć§ć®ę›øćč¾¼ćæåÆ¾åæœ
      ļ¼ˆć‚æćƒ–ćƒ¬ćƒƒćƒˆć®ć‚æćƒƒćƒę“ä½œćƒ»PCć®ćƒžć‚¦ć‚¹ę“ä½œäø”åÆ¾åæœļ¼‰

    4. éŸ³å£°čŖ­ćæäøŠć’:
      ć‚æćƒƒćƒ—ć—ćŸę–‡å­—ć‚„ć€ćƒšćƒ¼ć‚øå…Øä½“ć‚’
      ćƒ–ćƒ©ć‚¦ć‚¶ć®ę©Ÿčƒ½ļ¼ˆWeb Speech APIļ¼‰ć§čŖ­ćæäøŠć’

    5. ē”»åƒćƒ»PDFäæå­˜ę©Ÿčƒ½:
      ę›øć„ćŸå†…å®¹ć‚’PNGē”»åƒć‚„PDFćØć—ć¦ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰åÆčƒ½
      (iOSē‰¹ęœ‰ć®äæå­˜åˆ¶é™ć«ć‚‚åÆ¾åæœļ¼‰

    6. å¤ščØ€čŖžļ¼†ćƒ†ćƒ¼ćƒžåÆ¾åæœ:
      ę—„ęœ¬čŖž/č‹±čŖžć®åˆ‡ć‚Šę›æćˆć€ćƒ©ć‚¤ćƒˆ/ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ć®åˆ‡ć‚Šę›æćˆ

    7. ć‚ŗćƒ¼ćƒ ļ¼†ē§»å‹•:
      ćƒ”ćƒ³ćƒć‚¤ćƒ³ćƒ»ć‚¢ć‚¦ćƒˆļ¼ˆę‹”å¤§ēø®å°ļ¼‰ć‚„ć‚¹ćƒÆć‚¤ćƒ—ć§ć®ē”»é¢ē§»å‹•ć«åÆ¾åæœ


    šŸ› ļø ć‚³ćƒ¼ćƒ‰ć®ę§‹é€ č§£čŖ¬

    ć‚³ćƒ¼ćƒ‰ćÆå¤§ććåˆ†ć‘ć¦ć€
    ā‘ čØ­å®šćƒ»ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖčŖ­ćæč¾¼ćæ
    ā‘”CSSļ¼ˆćƒ‡ć‚¶ć‚¤ćƒ³ļ¼‰
    ā‘¢HTML(UIęž ēµ„ćæļ¼‰
    ā‘£JavaScriptļ¼ˆå‹•ä½œćƒ­ć‚øćƒƒć‚Æļ¼‰
    恮4ćƒ–ćƒ­ćƒƒć‚Æć§ę§‹ęˆć•ć‚Œć¦ć„ć¾ć™ć€‚

    1. <head>ļ¼šå¤–éƒØćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćØćƒ•ć‚©ćƒ³ćƒˆć®čŖ­ćæč¾¼ćæ

    • Google Fonts:
      Klee Oneļ¼ˆę•™ē§‘ę›øä½“ć®ć‚ˆć†ćŖę‰‹ę›øćé¢Øćƒ•ć‚©ćƒ³ćƒˆļ¼‰ćØ
      Noto Sans JP(UI用)を読み込んでいます。

    • FontAwesome:
      ćƒœć‚æćƒ³ć®ć‚¢ć‚¤ć‚³ćƒ³ļ¼ˆćƒšćƒ³ć€ę¶ˆć—ć‚“ćƒ ć€ć‚“ćƒŸē®±ćŖć©ļ¼‰ć‚’
      č”Øē¤ŗć™ć‚‹ćŸć‚ć®ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć§ć™ć€‚

    • html2canvas / jsPDF:
      HTMLć®ē”»é¢ć‚’ćć®ć¾ć¾ć€Œē”»åƒć€ćØć—ć¦ć‚­ćƒ£ćƒ—ćƒćƒ£ć—ć€
      恝悌悒怌PDFć€ć«å¤‰ę›ć—ć¦äæå­˜ć™ć‚‹ćŸć‚ć®
      å¼·åŠ›ćŖJavaScriptćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć§ć™ć€‚

    2. <style>:CSSćƒ‡ć‚¶ć‚¤ćƒ³ćØćƒ¬ć‚¹ćƒćƒ³ć‚·ćƒ–åÆ¾åæœ

    • CSSå¤‰ę•°ļ¼ˆ:root):
      č‰²ć®čØ­å®šć‚’å¤‰ę•°åŒ–ć—ć¦ćŠć‚Šć€
      .dark-mode ć‚Æćƒ©ć‚¹ćŒä»˜äøŽć•ć‚ŒćŸćØćć«
      å¤‰ę•°ć®č‰²ć‚’äø€ę–‰ć«ęš—ć„č‰²ć«åˆ‡ć‚Šę›æćˆć‚‹ć“ćØć§ć€
      ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ć‚’ē°”å˜ć«å®Ÿē¾ć—ć¦ć„ć¾ć™ć€‚

    • å·¦åˆ©ćåÆ¾åæœć®å·„å¤«:
      css
      body.left-hand .char-block { flex-direction: row-reverse; }
      å·¦ę‰‹ćƒ¢ćƒ¼ćƒ‰ć®ę™‚ćÆć€
      Flexboxć®äø¦ć³é †ć‚’åč»¢ļ¼ˆrow-reverse)させています。
      ć“ć‚Œć«ć‚ˆć‚Šć€ę›øć„ć¦ć„ć‚‹č‡Ŗåˆ†ć®ę‰‹ć§
      ć€ŒćŠę‰‹ęœ¬ć€ćŒéš ć‚ŒćŖć„ć‚ˆć†ć«é…ę…®ć•ć‚Œć¦ć„ć¾ć™ć€‚

    • ć‚­ćƒ£ćƒ³ćƒć‚¹ć®é‡ć­åˆć‚ć›:
      ę–‡å­—ć®ćƒžć‚¹ē›®ļ¼ˆ.cellļ¼‰ć®äøŠć«
      <canvas> ć‚æć‚°ć‚’ēµ¶åÆ¾é…ē½®ļ¼ˆposition: absoluteļ¼‰ć§é‡ć­ć¦ćŠć‚Šć€
      ćŠę‰‹ęœ¬ć‚’ćŖćžć‚Œć‚‹ć‚ˆć†ć«ćŖć£ć¦ć„ć¾ć™ć€‚

    3. <body>:HTMLの骨組み

    ē”»é¢ć«ęœ€åˆć‹ć‚‰å­˜åœØć—ć¦ć„ć‚‹ć®ćÆć€ä»„äø‹ć®3ć¤ć®ćƒ‘ćƒ¼ćƒ„ć ć‘ć§ć™ć€‚

    • #loading-overlay:
      äæå­˜äø­ćŖć©ć«ē”»é¢ć‚’ęš—ćć—ć¦ć€Œå‡¦ē†äø­ć€ć‚’å‡ŗć™ē”»é¢ć€‚

    • #image-modal:
      iPhone/iPad(iOSļ¼‰ć®å “åˆć€
      ē›“ęŽ„ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰ćŒåˆ¶é™ć•ć‚Œć‚‹ć“ćØćŒć‚ć‚‹ćŸć‚ć€
      ć€Œē”»åƒć‚’é•·ęŠ¼ć—ć—ć¦äæå­˜ć—ć¦ć­ć€ćØč”Øē¤ŗć™ć‚‹å°‚ē”Øć®ē”»é¢ć€‚

    • #controls:
      ē”»é¢äøŠéƒØć«å›ŗå®šć•ć‚Œć¦ć„ć‚‹ćƒ”ćƒ‹ćƒ„ćƒ¼ćƒćƒ¼ć€‚

    • #pages-container:
      ē·“ēæ’åø³ć®ćƒšćƒ¼ć‚øćŒå…„ć‚‹ć€Œē©ŗć®ē®±ć€ć§ć™ć€‚
      中身はすべてJavaScriptć§ē”Ÿęˆć•ć‚Œć¾ć™ć€‚

    4. <script>:JavaScriptć®åæƒč‡“éƒØ

    éžåøøć«é«˜åŗ¦ćŖå‡¦ē†ćŒč”Œć‚ć‚Œć¦ć„ć¾ć™ć€‚äø»č¦ćŖę©Ÿčƒ½ć‚’ćƒ”ćƒƒć‚Æć‚¢ćƒƒćƒ—ć—ć¾ć™ć€‚

    • ćƒ‡ćƒ¼ć‚æē®”ē†ļ¼ˆi18n, charsData):
      ę—„ęœ¬čŖž/č‹±čŖžć®ēæ»čØ³ćƒ‡ćƒ¼ć‚æćØć€
      ē·“ēæ’ć™ć‚‹ę–‡å­—ć®ćƒ‡ćƒ¼ć‚æļ¼ˆäŗ”åéŸ³ć‚„ć‚¢ćƒ«ćƒ•ć‚”ćƒ™ćƒƒćƒˆć€
      ćƒ˜ćƒœćƒ³å¼ćƒ»čØ“ä»¤å¼ć®é•ć„ćŖć©ļ¼‰ćŒć‚Ŗćƒ–ć‚øć‚§ć‚ÆćƒˆćØć—ć¦ę•“ē†ć•ć‚Œć¦ć„ć¾ć™ć€‚

    • ćƒšćƒ¼ć‚øć®å‹•ēš„ē”Ÿęˆļ¼ˆrenderPages()):
      charsData ć®ćƒ‡ćƒ¼ć‚æć‚’å…ƒć«ć€
      JavaScript恮 for ćƒ«ćƒ¼ćƒ—ć‚’ä½æć£ć¦
      å¤§é‡ć®HTMLļ¼ˆē·“ēæ’ćƒžć‚¹ć‚„Canvasļ¼‰ć‚’č‡Ŗå‹•ē”Ÿęˆć—ć€
      #pages-container に流し込んでいます。

    • ćŠēµµć‹ćę©Ÿčƒ½ļ¼ˆinitDrawing(), startDrawing(), draw() など):
      <canvas> APIć‚’åˆ©ē”Øć—ć¦ć„ć¾ć™ć€‚
      ćƒžć‚¦ć‚¹ć‚„ć‚æćƒƒćƒć®å‹•ćļ¼ˆmousemove, touchmoveļ¼‰ć‚’ę¤œēŸ„ć—ć¦ć€
      CanvasäøŠć«ē·šć‚’å¼•ćć¾ć™ć€‚
      ę¶ˆć—ć‚“ćƒ ćƒ¢ćƒ¼ćƒ‰ć®ę™‚ćÆ destination-out ćØć„ć†ćƒ¢ćƒ¼ćƒ‰ć«ć—ć¦
      ē·šć‚’é€ę˜ŽåŒ–ļ¼ˆę¶ˆåŽ»ļ¼‰ć—ć¦ć„ć¾ć™ć€‚

    • éŸ³å£°čŖ­ćæäøŠć’ļ¼ˆspeakText(), speakChar()):
      ćƒ–ćƒ©ć‚¦ć‚¶ęØ™ęŗ–ć® SpeechSynthesisUtterance を使用。
      å˜ć«ę–‡å­—ć‚’ęø”ć™ć ć‘ć§ćŖćć€
      ć€ŒćÆć€ć‚’ć€Œćƒć€ćØčŖ­ć¾ć›ć‚‹ć€čØ˜å·ć‚’ē„”č¦–ć™ć‚‹ćŖć©ć€
      č‡Ŗē„¶ć«ē™ŗéŸ³ć•ć›ć‚‹ćŸć‚ć®ē½®ę›å‡¦ē†ćŒē“°ć‹ćå®Ÿč£…ć•ć‚Œć¦ć„ć¾ć™ć€‚

    • ćƒ”ćƒ³ćƒć‚ŗćƒ¼ćƒ ćƒ»ē§»å‹•ļ¼ˆinitPanAndZoom()):
      ꌇ2ęœ¬ć§ć®ć‚æćƒƒćƒļ¼ˆe.touches.length === 2ļ¼‰ć®č·é›¢ć‚’
      ćƒ”ć‚æć‚“ćƒ©ć‚¹ć®å®šē†ļ¼ˆMath.hypotļ¼‰ć§čØˆē®—ć—ć€
      ē›“ę„Ÿēš„ćŖę‹”å¤§ēø®å°ļ¼ˆć‚ŗćƒ¼ćƒ ļ¼‰ć‚’å®Ÿē¾ć—ć¦ć„ć¾ć™ć€‚

    • äæå­˜ę©Ÿčƒ½ļ¼ˆsaveCurrentPage(), saveAllPages()):
      html2canvas ć§ē”»é¢ć‚’ē”»åƒåŒ–ć—ć¾ć™ć€‚ć“ć“ć§ć®ē“ ę™“ć‚‰ć—ć„å·„å¤«ćÆć€
      ćƒ¦ćƒ¼ć‚¶ćƒ¼ć®ē«Æęœ«ćŒiOSć‹ć©ć†ć‹ć‚’åˆ¤å®šļ¼ˆisIOS)している点です。
      iOSć®ćƒ–ćƒ©ć‚¦ć‚¶ļ¼ˆSafariなど)は
      JavaScriptć‹ć‚‰ć®å¼·åˆ¶ćƒ€ć‚¦ćƒ³ćƒ­ćƒ¼ćƒ‰ć‚’ćƒ–ćƒ­ćƒƒć‚Æć™ć‚‹ć“ćØćŒå¤šć„ćŸć‚ć€
      iOSć®ę™‚ć ć‘ć€Œē”»åƒć‚’ē”»é¢ć«č”Øē¤ŗć—ć¦ć€
      ćƒ¦ćƒ¼ć‚¶ćƒ¼č‡Ŗčŗ«ć«é•·ęŠ¼ć—äæå­˜ć•ć›ć‚‹ć€ćØć„ć†
      å®‰å…ØćŖćƒ•ć‚©ćƒ¼ćƒ«ćƒćƒƒć‚Æļ¼ˆä»£ę›æå‡¦ē†ļ¼‰ć‚’č”Œć£ć¦ć„ć¾ć™ć€‚


    šŸ‘ē·č©•

    å‰µä½œå¤§č³ž2026ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ć€å®Œå…Øē„”ę–™ćƒ»ē„žć‚¢ćƒ—ćƒŖć€‘å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖšŸ“±iPadćƒ»ć‚¹ćƒžćƒ›ćƒ»PCć§ćƒšćƒ³å­—ē·“ēæ’šŸ–Š #ē¾Žę–‡å­— #ć‚¢ćƒ—ćƒŖ #ai #Gemini #canvas怀handwriting practice,handwriting app,digital handwriting,learn to write,penmanship,beautiful handwriting,free handwriting app,free learning app,AI app,Google Gemini,Gemini AI,AI development,iPad handwriting,Apple Pencil handwriting,iPad learning,iPad education app,writing practice app,education app,learning app,web app,Chrome app,no download app,EdTech,assistive technology,accessibility,inclusive design,rehabilitation,occupational therapy,left handed writing,right handed writing,ambidextrous,English writing practice,Japanese writing practice,language learning,kids learning app,Creative Awards 2026,Sosaku Taisho 2026,ē”ŸęˆAI,å‰µä½œå¤§č³ž2026,ē¾Žę–‡å­—,文字緓習
    å‰µä½œå¤§č³ž2026ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€ć€å®Œå…Øē„”ę–™ćƒ»ē„žć‚¢ćƒ—ćƒŖć€‘å¤šę©Ÿčƒ½ćƒ‡ć‚øć‚æćƒ«ę–‡å­—ē·“ēæ’åø³ć‚¢ćƒ—ćƒŖšŸ“±iPadćƒ»ć‚¹ćƒžćƒ›ćƒ»PCć§ćƒšćƒ³å­—ē·“ēæ’šŸ–Š #ē¾Žę–‡å­— #ć‚¢ćƒ—ćƒŖ #ai #Gemini #canvas


    ć“ć®ć‚³ćƒ¼ćƒ‰ćÆć€å˜ćŖć‚‹Webćƒšćƒ¼ć‚øć§ćÆćŖć
    ć€Œå®Œęˆć•ć‚ŒćŸę•™č‚²ē³»Webć‚¢ćƒ—ćƒŖć€ć§ć™ć€‚

    • UXļ¼ˆćƒ¦ćƒ¼ć‚¶ćƒ¼ä½“éØ“ļ¼‰ćøć®é…ę…®:
      å·¦åˆ©ćåÆ¾åæœć€ćƒ€ćƒ¼ć‚Æćƒ¢ćƒ¼ćƒ‰ć€ē”»é¢ć‚ŗćƒ¼ćƒ ć€čŖ­ćæäøŠć’ę™‚ć®čŖ¤čŖ­é˜²ę­¢
      ļ¼ˆć€ŒćÆć€ć®čŖ­ćæę–¹ćŖć©ļ¼‰ć€ćƒ˜ćƒœćƒ³å¼ćƒ»čØ“ä»¤å¼ć®č§£čŖ¬ćƒšćƒ¼ć‚øć¾ć§
      å«ć¾ć‚Œć¦ć„ć‚‹ē‚¹ćŖć©ć€å­¦ēæ’č€…ćøć®ę€ć„ć‚„ć‚ŠćŒéšę‰€ć«č¦‹ć‚‰ć‚Œć¾ć™ć€‚

    • ćƒ¢ćƒ€ćƒ³ćŖęŠ€č”“ć®ę“»ē”Ø:
      ćƒ•ćƒ¬ćƒ¼ćƒ ćƒÆćƒ¼ć‚Æļ¼ˆReact悄VuećŖć©ļ¼‰ć‚’ä½æć‚ćšć«ć€
      瓠のJavaScriptļ¼ˆćƒćƒ‹ćƒ©JSļ¼‰ć ć‘ć§ēŠ¶ę…‹ē®”ē†ć€
      DOMē”Ÿęˆć€Canvasęē”»ć€ē«Æęœ«åˆ¤å®šć¾ć§ć‚’ē¾Žć—ćå®Ÿč£…ć—ć¦ć„ć¾ć™ć€‚


    恓恮HTMLćƒ•ć‚”ć‚¤ćƒ«ć‚’
    ćć®ć¾ć¾ćƒ–ćƒ©ć‚¦ć‚¶ļ¼ˆChrome悄SafarićŖć©ļ¼‰ć§é–‹ćć ć‘ć§
    ć™ćć«ćƒ•ćƒ«ę©Ÿčƒ½ć§éŠć¹ć‚‹ć€éžåøøć«č³Ŗć®é«˜ć„ć‚³ćƒ¼ćƒ‰ć§ć™ļ¼


    šŸŽ ć“ć‚“ćŖäŗŗć«ć‚Ŗć‚¹ć‚¹ćƒ”

    • ć²ć‚‰ćŒćŖć‚„ć‚«ć‚æć‚«ćƒŠć€ćƒ­ćƒ¼ćƒžå­—ć‚’č¦šćˆå§‹ć‚ć®å°ć•ćŖćŠå­ę§˜šŸ‘¶

    • åø‚č²©ć®ćƒ‰ćƒŖćƒ«ć ćØę‰‹ćŒę±šć‚ŒćŸć‚Šć€ę–‡å­—ćŒéš ć‚Œć¦ć—ć¾ć†å·¦åˆ©ćć®ę–¹āœļø

    • ē“™ć‚’ę¶ˆč²»ć›ćšć€ć‚æćƒ–ćƒ¬ćƒƒćƒˆć§ćƒšćƒ¼ćƒ‘ćƒ¼ćƒ¬ć‚¹å­¦ēæ’ć‚’ć•ć›ćŸć„č¦Ŗå¾”ć•ć‚“šŸ“±

    • ę­£ć—ć„ę›øćé †ć‚„ē™ŗéŸ³ć‚’å­¦ć³ćŸć„ć€ę—„ęœ¬čŖžå­¦ēæ’äø­ć®å¤–å›½äŗŗć®ę–¹šŸŒ

    å³č…•ćŒå‹•ć‹ćŖć„ćØć„ć†ēµ¶ęœ›ć®ę·µć‹ć‚‰ć€
    AIćØć„ć†å¼·åŠ›ćŖē›øę£’ćØćØć‚‚ć«ē”Ÿćæå‡ŗć—ćŸć“ć®ć‚¢ćƒ—ćƒŖć€‚
    ę•™č‚²ēš„é…ę…®ćØćƒ‡ć‚øć‚æćƒ«ćŖć‚‰ć§ćÆć®ę©Ÿčƒ½ćŒčžåˆć—ćŸć€č‡Ŗäæ”ä½œć§ć™ć€‚

    ć“ć®ć‚¢ćƒ—ćƒŖćŒć€ę–‡å­—ć‚’å­¦ć¶čŖ°ć‹ć®
    ć€Œäøä¾æć€ć‚’ć€Œę„½ć—ć„ć€ć«å¤‰ćˆć‚‹ćć£ć‹ć‘ć«ćŖć‚ŒćŸć‚‰ć€
    ć“ć‚Œć»ć©å¬‰ć—ć„ć“ćØćÆć‚ć‚Šć¾ć›ć‚“ć€‚

    ćœć²ć€iPad悄PCć‹ć‚‰č§¦ć£ć¦ćæć¦ćć ć•ć„ć­ļ¼
    ć‚¢ćƒ—ćƒŖćÆć‚³ćƒćƒ©šŸ‘‡




    ā–  ć‚³ćƒ³ćƒ†ć‚¹ćƒˆć‚æć‚°

    #å‰µä½œå¤§č³ž2026 #ć‚Ŗćƒ¼ćƒ«ć‚«ćƒ†ć‚“ćƒŖéƒØé–€

    ā–  å·¦åˆ©ććƒ»ć‚Øćƒƒć‚»ć‚¤ćƒ»äŗŗē”Ÿ

    #å·¦åˆ©ć #ć‚Øćƒƒć‚»ć‚¤ #ćƒŖćƒćƒ“ćƒŖ #偄康 #é—˜ē—… #éšœå®³č€… #障害 #ćƒćƒŖć‚¢ćƒ•ćƒŖćƒ¼ #ć‚¢ć‚Æć‚»ć‚·ćƒ“ćƒŖćƒ†ć‚£ #ćƒ€ć‚¤ćƒćƒ¼ć‚·ćƒ†ć‚£ #ćƒžć‚¤ćƒŽćƒŖćƒ†ć‚£ #ćƒ©ć‚¤ćƒ•ć‚¹ć‚æć‚¤ćƒ« #ē”Ÿćę–¹ #äŗŗē”Ÿ #ęŒ‘ęˆ¦ #体験談 #ćƒ¢ćƒćƒ™ćƒ¼ć‚·ćƒ§ćƒ³

    ā–  ę•™č‚²ćƒ»å­č‚²ć¦ćƒ»ēŸ„č‚²

    #ēŸ„č‚² #子育て #育児 #教育 #学習 #勉強 #幼児教育 #å°å­¦ē”Ÿ #äæč‚²åœ’ #å¹¼ēØšåœ’ #ICT教育 #EdTech #ēŸ„č‚²ć‚¢ćƒ—ćƒŖ #ćƒ‰ćƒŖćƒ« #宿锌 #ć‚­ćƒƒć‚ŗ #勉強垢 #ę—„čØ˜

    ā–  ę–‡å­—ćƒ»ę›øå†™ćƒ»čŖžå­¦

    #ę—„ęœ¬čŖžå­¦ēæ’ #ć²ć‚‰ćŒćŖ #ć‚«ć‚æć‚«ćƒŠ #ćƒ­ćƒ¼ćƒžå­— #ę•°å­— #ćƒšćƒ³å­— #ē¾Žę–‡å­— #書道  #ę‰‹ę›øć #ę‰‹ę›øćę–‡å­— #ēæ’å­— #ę—„ęœ¬čŖž #Japanese #ę—„ęœ¬čŖžę•™č‚² #čŖžå­¦ #č‹±čŖžå­¦ēæ’ #č‹±čŖž

    ā–  iPadćƒ»ćƒ‡ć‚øć‚æćƒ«ę“»ē”Ø

    #iPad擻用 #iPad #ć‚æćƒ–ćƒ¬ćƒƒćƒˆ #ApplePencil #ćƒ‡ć‚øć‚æćƒ« #ćƒšćƒ¼ćƒ‘ćƒ¼ćƒ¬ć‚¹ #ćƒ©ć‚¤ćƒ•ćƒćƒƒć‚Æ #ä¾æåˆ©ćƒ„ćƒ¼ćƒ« #ćŠć™ć™ć‚ć‚¢ćƒ—ćƒŖ #ē„”ę–™ć‚¢ćƒ—ćƒŖ

    ā–  AIćƒ»ćƒ—ćƒ­ć‚°ćƒ©ćƒŸćƒ³ć‚°ćƒ»å€‹äŗŗé–‹ē™ŗ

    #ć‚¢ćƒ—ćƒŖé–‹ē™ŗ #AIćØć‚„ć£ć¦ćæćŸ #ćƒ—ćƒ­ć‚°ćƒ©ćƒŸćƒ³ć‚° #Webć‚¢ćƒ—ćƒŖ #HTML #JavaScript #AI #ē”ŸęˆAI #ChatGPT #Gemini #ć‚Øćƒ³ć‚øćƒ‹ć‚¢ #ćƒ†ć‚ÆćƒŽćƒ­ć‚øćƒ¼ #IT #ćƒ—ćƒ­ć‚°ćƒ©ćƒŸćƒ³ć‚°åˆåæƒč€… #UIUX #Webćƒ‡ć‚¶ć‚¤ćƒ³

    ā–  å‰µä½œćƒ»å°čŖ¬ćƒ»ć‚Øćƒ³ć‚æćƒ”

    #創作 #å°čŖ¬ #ćƒ•ć‚”ćƒ³ć‚æć‚øćƒ¼ #ć‚ÆćƒŖć‚Øć‚¤ć‚æćƒ¼ #ćƒ•ć‚”ćƒ³ć‚¢ćƒ¼ćƒˆ #ć‚¤ćƒ©ć‚¹ćƒˆ #ć‚¢ćƒ‹ćƒ” #ę˜ åƒåˆ¶ä½œ #ę˜ ē”» #ć‚Øćƒ³ć‚æćƒ”

    ā–  noteå®šē•Ŗćƒ»ę—„åøø

    #ęÆŽę—„note #note #ę—„čØ˜ #ć‚³ćƒ©ćƒ  #ę—„åøø #スキしてみて #読書
    #AIć§éŠć¼ć† #å­ć©ć‚‚ć®ęˆé•·ć‚’ę„Ÿć˜ć‚‹ćØć
    #AIćØå§‹ć‚ć¦ćæćŸ #ć‚¹ćƒ©ćƒ³ćƒ—ć®ä¹—ć‚Šč¶Šćˆę–¹



    å‰µä½œå¤§č³ž2026šŸ’Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-|🐰Koroć”ć‚ƒć‚“šŸŒøå…Žč€³ć‚³ćƒ­šŸ’–å‰µä½œå¤§č³ž2026šŸ’Žå…‰ē‰‡-ćƒ’ć‚«ćƒŖćƒŽć‚«ć‚±ćƒ©-Hikari no Kakera|note




    ć“ć®čØ˜äŗ‹ćŒå‚åŠ ć—ć¦ć„ć‚‹å‹Ÿé›†

    ć‚ćŖćŸćøć®ćŠć™ć™ć‚