(function () {
    var STYLE_ID = 'hy-global-toast-style';
    var TOAST_ID = 'hy-global-toast';
    var timer = 0;

    function ensureStyle() {
        if (document.getElementById(STYLE_ID)) return;
        var style = document.createElement('style');
        style.id = STYLE_ID;
        style.textContent = [
            '.hy-global-toast{',
            'position:fixed;',
            'left:50%;',
            'top:max(84px,calc(env(safe-area-inset-top) + 24px));',
            'z-index:10000;',
            'min-width:168px;',
            'max-width:min(340px,calc(100vw - 40px));',
            'padding:13px 22px;',
            'border-radius:24px;',
            'background:rgba(0,0,0,.86);',
            'color:#fff;',
            'font:800 15px/1.35 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;',
            'text-align:center;',
            'box-shadow:0 12px 32px rgba(0,0,0,.36);',
            'opacity:0;',
            'pointer-events:none;',
            'transform:translate(-50%,-8px);',
            'transition:opacity .18s ease,transform .18s ease;',
            '}',
            '.hy-global-toast.is-visible{',
            'opacity:1;',
            'transform:translate(-50%,0);',
            '}',
        ].join('');
        document.head.appendChild(style);
    }

    function ensureToast() {
        var node = document.getElementById(TOAST_ID);
        if (node) return node;
        ensureStyle();
        node = document.createElement('div');
        node.id = TOAST_ID;
        node.className = 'hy-global-toast';
        node.setAttribute('role', 'status');
        node.setAttribute('aria-live', 'polite');
        document.body.appendChild(node);
        return node;
    }

    function hide() {
        var node = document.getElementById(TOAST_ID);
        if (node) node.classList.remove('is-visible');
    }

    function show(message, options) {
        var text = String(message || '').trim();
        if (!text) return;
        if (!document.body) {
            document.addEventListener(
                'DOMContentLoaded',
                function () {
                    show(text, options);
                },
                { once: true }
            );
            return;
        }
        var node = ensureToast();
        var duration = Number((options && options.duration) || 1800);
        node.textContent = text;
        window.requestAnimationFrame(function () {
            node.classList.add('is-visible');
        });
        window.clearTimeout(timer);
        timer = window.setTimeout(hide, duration);
    }

    window.HyAppToast = {
        show: show,
        hide: hide,
    };

    window.addEventListener('hyapp:toast', function (event) {
        var detail = event.detail || {};
        show(detail.message || detail.text, detail);
    });
})();
