*{box-sizing:border-box}body{margin:0;background:#f3f2eb;color:#173f46;font:15px/1.5 system-ui,sans-serif}header{display:flex;align-items:center;justify-content:space-between;padding:22px 32px;border-bottom:1px solid #cbd6d3}small{letter-spacing:.18em;font-size:10px;font-weight:700}h1{margin:4px 0;font:36px/1.1 Georgia,serif}h1 span{display:inline-block;font:15px system-ui;color:#5d7778;margin-left:10px}button{min-height:44px;background:#fffefa;border:1px solid #a4beb9;border-radius:6px;padding:9px 13px;color:#214d52;font:inherit;cursor:pointer}button:hover{background:#dfeee8}button:focus-visible,input:focus-visible,canvas:focus-visible{outline:3px solid #c1843a;outline-offset:3px}button[aria-pressed=true]{background:#214d52;color:white}main{display:grid;grid-template-columns:280px minmax(0,1fr);min-height:630px}aside{padding:24px;border-right:1px solid #cbd6d3}aside p{margin:0 0 18px;color:#5b7273;font-size:13px}.intro{font:23px Georgia,serif!important;color:#173f46!important}.presets{display:flex;gap:5px;margin:22px 0}.presets button{padding:6px 8px;font-size:12px;flex:1}label{display:block;font-size:13px;margin:18px 0}output{float:right;font-weight:700}input{display:block;width:100%;height:32px;accent-color:#327d82;cursor:pointer}.actions{display:flex;gap:5px;flex-wrap:wrap}.actions button{font-size:12px;flex:1}#status{margin-top:18px;margin-bottom:8px}.keys{font-size:11px!important}#water{position:relative;min-width:0;min-height:550px;background:linear-gradient(#e7f0ea,#f7f8ef);overflow:hidden}canvas{display:block;width:100%;height:100%;position:absolute;inset:0;touch-action:none;cursor:grab}canvas:active{cursor:grabbing}.water-note{position:absolute;bottom:25px;width:100%;text-align:center;font-size:10px;letter-spacing:.2em;color:#447377;pointer-events:none}footer{text-align:center;padding:14px;font-size:9px;letter-spacing:.2em;border-top:1px solid #cbd6d3}#guide{position:fixed;z-index:5;inset:8vh max(20px,calc((100vw - 700px)/2));background:#fffefa;border:1px solid #a4beb9;box-shadow:0 15px 100px #173f4666;border-radius:12px;padding:28px;overflow:auto}#guide h2{font:28px Georgia,serif}a{color:#226e77}#error{position:absolute;inset:20px;background:#fffefa;padding:20px;height:fit-content}body:has(#guide:not([hidden])) main{filter:blur(2px)}@media(max-width:720px){header{padding:16px}h1{font-size:28px}h1 span{display:block;margin:5px 0 0}main{display:flex;flex-direction:column-reverse}#water{height:380px;min-height:380px}aside{border:0;padding:20px}aside label{margin:12px 0}.presets{margin:14px 0}#guide{inset:15px}header button{font-size:13px}}