cookiecraft 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- .cc-banner,.cc-modal,.cc-widget{--cc-primary:#1a1a1a;--cc-primary-hover:#333;--cc-primary-glow:rgba(0,0,0,.12);--cc-bg:#fff;--cc-text:#1a1a1a;--cc-text-secondary:#666;--cc-border:#e5e7eb;--cc-overlay:rgba(0,0,0,.4);--cc-padding:1.125rem;--cc-gap:0.5rem;--cc-border-radius:12px;--cc-shadow:0 -4px 24px rgba(0,0,0,.12);--cc-transition:0.3s cubic-bezier(0.4,0,0.2,1);--cc-backdrop-blur:10px;--cc-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.cc-banner *,.cc-modal *,.cc-widget *{box-sizing:border-box;margin:0;padding:0}.cc-banner{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--cc-bg);bottom:0;box-shadow:var(--cc-shadow);font-family:var(--cc-font-family);left:0;padding:var(--cc-padding);position:fixed;right:0;transform:translateY(100%);transition:transform var(--cc-transition);z-index:2147483647}.cc-banner.cc-backdrop-blur{backdrop-filter:blur(var(--cc-backdrop-blur));background:hsla(0,0%,100%,.95)}.cc-banner.is-visible{transform:translateY(0)}.cc-banner__container{margin:0 auto;max-width:1200px}.cc-banner__content{margin-bottom:1rem}.cc-banner__title{color:var(--cc-text);font-size:.9375rem;font-weight:600;letter-spacing:-.01em;line-height:1.3;margin:0 0 .375rem}.cc-banner__description{color:var(--cc-text-secondary);font-size:.8125rem;line-height:1.5;margin:0}.cc-banner__description a{color:var(--cc-primary);font-weight:500;text-decoration:none;transition:all .2s ease}.cc-banner__description a:hover{color:var(--cc-primary-hover);text-decoration:underline}.cc-banner__actions{display:flex;flex-wrap:wrap;gap:var(--cc-gap)}.cc-btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-family:inherit;font-size:.8125rem;font-weight:500;justify-content:center;letter-spacing:-.01em;min-height:36px;min-width:36px;padding:.5rem 1.125rem;text-decoration:none;transition:all .2s ease}.cc-btn:focus-visible{outline:3px solid var(--cc-primary);outline-offset:2px}.cc-btn:disabled{cursor:not-allowed;opacity:.6}.cc-btn--accept{background:var(--cc-primary);color:#fff}.cc-btn--accept:hover:not(:disabled){background:var(--cc-primary-hover);box-shadow:0 4px 12px var(--cc-primary-glow);transform:translateY(-1px)}.cc-btn--accept:active:not(:disabled){transform:translateY(0)}.cc-btn--ghost{background:transparent;color:var(--cc-text-secondary);font-size:.75rem;padding:.5rem .75rem}.cc-btn--ghost:hover:not(:disabled){color:var(--cc-text);text-decoration:underline}.cc-btn--ghost:active:not(:disabled){transform:translateY(0)}.cc-btn--primary{background:var(--cc-primary);color:#fff}.cc-btn--primary:hover:not(:disabled){background:var(--cc-primary-hover);box-shadow:0 4px 12px var(--cc-primary-glow);transform:translateY(-1px)}.cc-btn--primary:active:not(:disabled){transform:translateY(0)}.cc-btn--secondary{background:#f3f4f6;color:var(--cc-text)}.cc-btn--secondary:hover:not(:disabled){background:#e5e7eb;transform:translateY(-1px)}.cc-btn--secondary:active:not(:disabled){transform:translateY(0)}.cc-btn--tertiary{background:transparent;border:1px solid var(--cc-border);color:var(--cc-text-secondary)}.cc-btn--tertiary:hover:not(:disabled){background:rgba(0,0,0,.03);color:var(--cc-text);transform:translateY(-1px)}.cc-btn--tertiary:active:not(:disabled){transform:translateY(0)}@media (min-width:768px){.cc-banner--bar .cc-banner__container{align-items:center;display:flex;gap:2rem;justify-content:space-between}.cc-banner--bar .cc-banner__content{flex:1;margin-bottom:0}.cc-banner--bar .cc-banner__actions{flex-shrink:0}}.cc-banner--top{bottom:auto;box-shadow:0 4px 24px rgba(0,0,0,.12);top:0;transform:translateY(-100%)}.cc-banner--top.is-visible{transform:translateY(0)}.cc-banner--center{border-radius:var(--cc-border-radius);bottom:auto;left:50%;max-width:600px;opacity:0;right:auto;top:50%;transform:translate(-50%,-50%) scale(.9)}.cc-banner--center.is-visible{opacity:1;transform:translate(-50%,-50%) scale(1)}.cc-banner--bottom-right{border-radius:var(--cc-border-radius);bottom:1.5rem;left:auto;max-width:420px;right:1.5rem;transform:translateX(calc(100% + 2rem))}.cc-banner--bottom-right.is-visible{transform:translateX(0)}.cc-banner--bottom-left{border-radius:var(--cc-border-radius);bottom:1.5rem;left:1.5rem;max-width:420px;right:auto;transform:translateX(calc(-100% - 2rem))}.cc-banner--bottom-left.is-visible{transform:translateX(0)}.cc-banner--box{border-radius:var(--cc-border-radius);max-width:420px}.cc-banner--box .cc-banner__container{display:block}.cc-banner--box .cc-banner__actions{flex-direction:column;margin-top:1rem}.cc-banner--box .cc-banner__actions .cc-btn{width:100%}.cc-banner--floating{border-radius:var(--cc-border-radius);box-shadow:0 8px 32px rgba(0,0,0,.2);max-width:380px}.cc-banner--floating .cc-banner__container{display:block}.cc-banner--floating .cc-banner__title{font-size:1rem}.cc-banner--floating .cc-banner__description{font-size:.8125rem}.cc-banner--floating .cc-banner__actions{flex-direction:column;margin-top:1rem}.cc-banner--floating .cc-banner__actions .cc-btn{font-size:.8125rem;padding:.625rem 1rem;width:100%}@media (prefers-color-scheme:dark){.cc-banner[data-theme=auto]{--cc-bg:#1a1a1a;--cc-text:#fff;--cc-text-secondary:#a0a0a0;--cc-border:#333}.cc-banner[data-theme=auto].cc-backdrop-blur{background:rgba(26,26,26,.95)}.cc-banner[data-theme=auto] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-banner[data-theme=auto] .cc-btn--secondary:hover:not(:disabled){background:#333}.cc-banner[data-theme=auto] .cc-btn--tertiary{border-color:#555;color:#a0a0a0}}.cc-banner[data-theme=dark]{--cc-bg:#1a1a1a;--cc-text:#fff;--cc-text-secondary:#a0a0a0;--cc-border:#333}.cc-banner[data-theme=dark].cc-backdrop-blur{background:rgba(26,26,26,.95)}.cc-banner[data-theme=dark] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-banner[data-theme=dark] .cc-btn--secondary:hover:not(:disabled){background:#333}.cc-banner[data-theme=dark] .cc-btn--tertiary{border-color:#555;color:#a0a0a0}@keyframes cc-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes cc-slideUp{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes cc-slideDown{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}@keyframes cc-scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes cc-backdropFadeIn{0%{opacity:0}to{opacity:1}}.cc-animate-fadeIn{animation:cc-fadeIn .3s ease-out}.cc-animate-slideUp{animation:cc-slideUp .4s cubic-bezier(.4,0,.2,1)}.cc-animate-slideDown{animation:cc-slideDown .4s cubic-bezier(.4,0,.2,1)}.cc-animate-scaleIn{animation:cc-scaleIn .3s cubic-bezier(.4,0,.2,1)}@media (prefers-reduced-motion:reduce){.cc-banner{transition:none}.cc-animate-fadeIn,.cc-animate-scaleIn,.cc-animate-slideDown,.cc-animate-slideUp{animation:none}.cc-btn{transition:none}}.cc-modal{align-items:center;bottom:0;display:flex;justify-content:center;left:0;opacity:0;padding:1rem;pointer-events:none;position:fixed;right:0;top:0;transition:opacity var(--cc-transition);z-index:10000}.cc-modal.is-visible{opacity:1;pointer-events:all}.cc-modal__overlay{background:var(--cc-overlay);bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.cc-modal__content{background:var(--cc-bg);border-radius:var(--cc-border-radius);box-shadow:0 16px 48px rgba(0,0,0,.18),0 4px 12px rgba(0,0,0,.08);display:flex;flex-direction:column;max-height:90vh;max-width:480px;overflow:hidden;position:relative;transform:scale(.9);transition:transform var(--cc-transition);width:100%}.cc-modal.is-visible .cc-modal__content{transform:scale(1)}.cc-modal__header{align-items:center;background:linear-gradient(135deg,var(--cc-primary) 0,var(--cc-primary-hover) 100%);display:flex;flex-shrink:0;justify-content:space-between;padding:1.125rem 1.25rem}.cc-modal__header h2{color:#fff;font-size:.95rem;font-weight:600;letter-spacing:-.01em;margin:0}.cc-modal__body{flex:1;overflow-y:auto;padding:1rem 1.25rem}.cc-category{border-bottom:1px solid var(--cc-border);padding:.75rem 0}.cc-category:last-child{border-bottom:none}.cc-category__header{align-items:center;display:flex;gap:.75rem}.cc-category__info{flex:1}.cc-category__info h3{color:var(--cc-text);font-size:.8125rem;font-weight:600;letter-spacing:-.01em;margin:0 0 .125rem}.cc-category__info p{color:var(--cc-text-secondary);font-size:.75rem;line-height:1.4;margin:0}.cc-toggle{align-items:center;cursor:pointer;display:inline-flex;flex-shrink:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cc-toggle input{height:0;opacity:0;position:absolute;width:0}.cc-toggle__slider{background:#d1d5db;border-radius:10px;height:20px;position:relative;transition:background-color .2s ease;width:36px}.cc-toggle__slider:before{background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,.15);content:"";height:16px;left:2px;position:absolute;top:2px;transition:transform .2s ease;width:16px}.cc-toggle input:checked+.cc-toggle__slider{background:var(--cc-primary)}.cc-toggle input:checked+.cc-toggle__slider:before{transform:translateX(16px)}.cc-toggle input:focus-visible+.cc-toggle__slider{outline:2px solid var(--cc-primary);outline-offset:2px}.cc-toggle--disabled{cursor:not-allowed;opacity:.6}.cc-toggle--disabled input:checked+.cc-toggle__slider{background:#9ca3af}.cc-modal__footer{align-items:center;border-top:1px solid var(--cc-border);display:flex;flex-shrink:0;gap:var(--cc-gap);justify-content:space-between;padding:1rem 1.25rem}.cc-modal__footer-links{align-items:center;display:flex;gap:.5rem}.cc-modal__footer-actions{display:flex;gap:var(--cc-gap)}.cc-privacy-link{align-items:center;color:var(--cc-text-secondary);display:inline-flex;font-size:.875rem;gap:.25rem;text-decoration:none;transition:color .2s ease}.cc-privacy-link:hover{color:var(--cc-primary);text-decoration:underline}@media (prefers-color-scheme:dark){.cc-modal[data-theme=auto] .cc-modal__content{background:#1a1a1a}.cc-modal[data-theme=auto] .cc-category__info h3{color:#fff}.cc-modal[data-theme=auto] .cc-category__info p{color:#a0a0a0}.cc-modal[data-theme=auto] .cc-category,.cc-modal[data-theme=auto] .cc-modal__footer{border-color:#333}.cc-modal[data-theme=auto] .cc-toggle__slider{background:#444}.cc-modal[data-theme=auto] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-modal[data-theme=auto] .cc-btn--secondary:hover:not(:disabled){background:#333}}.cc-modal[data-theme=dark] .cc-modal__content{background:#1a1a1a}.cc-modal[data-theme=dark] .cc-category__info h3{color:#fff}.cc-modal[data-theme=dark] .cc-category__info p{color:#a0a0a0}.cc-modal[data-theme=dark] .cc-category,.cc-modal[data-theme=dark] .cc-modal__footer{border-color:#333}.cc-modal[data-theme=dark] .cc-toggle__slider{background:#444}.cc-modal[data-theme=dark] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-modal[data-theme=dark] .cc-btn--secondary:hover:not(:disabled){background:#333}.cc-modal--bottom-right{align-items:flex-end;justify-content:flex-end;padding:1.5rem}.cc-modal--bottom-right .cc-modal__content{max-width:450px;transform:translateX(100%)}.cc-modal--bottom-right.is-visible .cc-modal__content{transform:translateX(0)}.cc-modal--bottom-left{align-items:flex-end;justify-content:flex-start;padding:1.5rem}.cc-modal--bottom-left .cc-modal__content{max-width:450px;transform:translateX(-100%)}.cc-modal--bottom-left.is-visible .cc-modal__content{transform:translateX(0)}.cc-modal--top-right{align-items:flex-start;justify-content:flex-end;padding:1.5rem}.cc-modal--top-right .cc-modal__content{max-width:450px;transform:translateX(100%)}.cc-modal--top-right.is-visible .cc-modal__content{transform:translateX(0)}.cc-modal--top-left{align-items:flex-start;justify-content:flex-start;padding:1.5rem}.cc-modal--top-left .cc-modal__content{max-width:450px;transform:translateX(-100%)}.cc-modal--top-left.is-visible .cc-modal__content{transform:translateX(0)}@media (max-width:640px){.cc-modal{align-items:flex-end;padding:0}.cc-modal__content{border-radius:16px 16px 0 0;max-height:85vh;max-width:100%;transform:translateY(100%);width:100%}.cc-modal.is-visible .cc-modal__content{transform:translateY(0)}.cc-modal__body{padding:1rem 1.25rem}.cc-modal__footer{align-items:stretch;flex-direction:column;padding:1rem 1.25rem 1.5rem}.cc-modal__footer-links{justify-content:center;margin-top:.75rem;order:2}.cc-modal__footer-actions{flex-direction:column;order:1;width:100%}.cc-modal__footer .cc-btn{width:100%}}.cc-widget{align-items:center;background:#fff;border:1.5px solid var(--cc-primary);border-radius:50px;box-shadow:0 2px 8px rgba(0,0,0,.08);color:var(--cc-primary);cursor:pointer;display:flex;font-family:var(--cc-font-family);gap:.5rem;min-height:40px;opacity:0;padding:.625rem .875rem;position:fixed;transform:scale(0);transition:all .3s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:9998}.cc-widget.is-visible{opacity:1;transform:scale(1)}.cc-widget:hover{background:var(--cc-primary);box-shadow:0 4px 16px rgba(0,0,0,.12);color:#fff;transform:scale(1.05)}.cc-widget:active{transform:scale(.98)}.cc-widget:focus-visible{outline:3px solid var(--cc-primary);outline-offset:2px}.cc-widget__icon{flex-shrink:0;height:20px;width:20px}.cc-widget__text{color:inherit;font-size:.8125rem;font-weight:500;white-space:nowrap}.cc-widget--bottom-right{bottom:1.5rem;right:1.5rem}.cc-widget--bottom-left{bottom:1.5rem;left:1.5rem}.cc-widget--top-right{right:1.5rem;top:1.5rem}.cc-widget--top-left{left:1.5rem;top:1.5rem}.cc-widget--compact{border-radius:50%;height:42px;justify-content:center;padding:.625rem;width:42px}.cc-widget--compact .cc-widget__text{display:none}@media (max-width:640px){.cc-widget--full .cc-widget__text{display:none}.cc-widget--full{border-radius:50%;height:44px;justify-content:center;padding:.625rem;width:44px}}@keyframes cc-widget-bounce{0%{transform:scale(0)}50%{transform:scale(1.1)}to{transform:scale(1)}}.cc-widget.is-visible{animation:cc-widget-bounce .4s cubic-bezier(.4,0,.2,1)}.cc-widget[data-theme=dark]{background:#1a1a1a;border-color:var(--cc-primary);color:var(--cc-primary)}.cc-widget[data-theme=dark]:hover{background:var(--cc-primary);color:#fff}@media (prefers-color-scheme:dark){.cc-widget[data-theme=auto]{background:#1a1a1a;border-color:var(--cc-primary);color:var(--cc-primary)}.cc-widget[data-theme=auto]:hover{background:var(--cc-primary);color:#fff}}@media (prefers-reduced-motion:reduce){.cc-widget{transition:none}.cc-widget.is-visible{animation:none}.cc-widget:hover{transform:none}}
1
+ .cc-banner,.cc-modal,.cc-widget{--cc-primary:#1a1a1a;--cc-primary-hover:#333;--cc-primary-glow:rgba(0,0,0,.12);--cc-bg:#fff;--cc-text:#1a1a1a;--cc-text-secondary:#666;--cc-border:#e5e7eb;--cc-overlay:rgba(0,0,0,.4);--cc-padding:1.125rem;--cc-gap:0.5rem;--cc-border-radius:12px;--cc-shadow:0 -4px 24px rgba(0,0,0,.12);--cc-transition:0.3s cubic-bezier(0.4,0,0.2,1);--cc-backdrop-blur:10px;--cc-font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.cc-banner *,.cc-modal *,.cc-widget *{box-sizing:border-box;margin:0;padding:0}.cc-banner{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--cc-bg);bottom:0;box-shadow:var(--cc-shadow);font-family:var(--cc-font-family);left:0;padding:var(--cc-padding);position:fixed;right:0;transform:translateY(100%);transition:transform var(--cc-transition);z-index:2147483647}.cc-banner.cc-backdrop-blur{backdrop-filter:blur(var(--cc-backdrop-blur));background:hsla(0,0%,100%,.95)}.cc-banner.is-visible{transform:translateY(0)}.cc-banner__container{margin:0 auto;max-width:1200px}.cc-banner__content{margin-bottom:1rem}.cc-banner__title{color:var(--cc-text);font-size:.9375rem;font-weight:600;letter-spacing:-.01em;line-height:1.3;margin:0 0 .375rem}.cc-banner__description{color:var(--cc-text-secondary);font-size:.8125rem;line-height:1.5;margin:0}.cc-banner__description a{color:var(--cc-primary);font-weight:500;text-decoration:none;transition:all .2s ease}.cc-banner__description a:hover{color:var(--cc-primary-hover);text-decoration:underline}.cc-banner__customize{color:inherit;cursor:pointer;font-weight:inherit;text-decoration:none}.cc-banner__actions{display:flex;flex-wrap:wrap;gap:var(--cc-gap)}.cc-btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-family:inherit;font-size:.8125rem;font-weight:500;justify-content:center;letter-spacing:-.01em;min-height:36px;min-width:36px;padding:.5rem 1.125rem;text-decoration:none;transition:all .2s ease}.cc-btn:focus-visible{outline:3px solid var(--cc-primary);outline-offset:2px}.cc-btn:disabled{cursor:not-allowed;opacity:.6}.cc-btn--accept{background:var(--cc-primary);color:#fff}.cc-btn--accept:hover:not(:disabled){background:var(--cc-primary-hover);box-shadow:0 4px 12px var(--cc-primary-glow);transform:translateY(-1px)}.cc-btn--accept:active:not(:disabled){transform:translateY(0)}.cc-btn--ghost{background:transparent;color:var(--cc-text-secondary);font-size:.75rem;padding:.5rem .75rem}.cc-btn--ghost:hover:not(:disabled){color:var(--cc-text);text-decoration:underline}.cc-btn--ghost:active:not(:disabled){transform:translateY(0)}.cc-btn--primary{background:var(--cc-primary);color:#fff}.cc-btn--primary:hover:not(:disabled){background:var(--cc-primary-hover);box-shadow:0 4px 12px var(--cc-primary-glow);transform:translateY(-1px)}.cc-btn--primary:active:not(:disabled){transform:translateY(0)}.cc-btn--secondary{background:#f3f4f6;color:var(--cc-text)}.cc-btn--secondary:hover:not(:disabled){background:#e5e7eb;transform:translateY(-1px)}.cc-btn--secondary:active:not(:disabled){transform:translateY(0)}.cc-btn--tertiary{background:transparent;border:1px solid var(--cc-border);color:var(--cc-text-secondary)}.cc-btn--tertiary:hover:not(:disabled){background:rgba(0,0,0,.03);color:var(--cc-text);transform:translateY(-1px)}.cc-btn--tertiary:active:not(:disabled){transform:translateY(0)}@media (min-width:768px){.cc-banner--bar .cc-banner__container{align-items:center;display:flex;gap:2rem;justify-content:space-between}.cc-banner--bar .cc-banner__content{flex:1;margin-bottom:0}.cc-banner--bar .cc-banner__actions{flex-shrink:0}}.cc-banner--top{bottom:auto;box-shadow:0 4px 24px rgba(0,0,0,.12);top:0;transform:translateY(-100%)}.cc-banner--top.is-visible{transform:translateY(0)}.cc-banner--center{border-radius:var(--cc-border-radius);bottom:auto;left:50%;max-width:600px;opacity:0;right:auto;top:50%;transform:translate(-50%,-50%) scale(.9)}.cc-banner--center.is-visible{opacity:1;transform:translate(-50%,-50%) scale(1)}.cc-banner--bottom-right{border-radius:var(--cc-border-radius);bottom:1.5rem;left:auto;max-width:420px;right:1.5rem;transform:translateX(calc(100% + 2rem))}.cc-banner--bottom-right.is-visible{transform:translateX(0)}.cc-banner--bottom-left{border-radius:var(--cc-border-radius);bottom:1.5rem;left:1.5rem;max-width:420px;right:auto;transform:translateX(calc(-100% - 2rem))}.cc-banner--bottom-left.is-visible{transform:translateX(0)}.cc-banner--box{border-radius:var(--cc-border-radius);max-width:420px}.cc-banner--box .cc-banner__container{display:block}.cc-banner--box .cc-banner__actions{flex-direction:column;margin-top:1rem}.cc-banner--box .cc-banner__actions .cc-btn{width:100%}.cc-banner--floating{border-radius:var(--cc-border-radius);box-shadow:0 8px 32px rgba(0,0,0,.2);max-width:380px}.cc-banner--floating .cc-banner__container{display:block}.cc-banner--floating .cc-banner__title{font-size:1rem}.cc-banner--floating .cc-banner__description{font-size:.8125rem}.cc-banner--floating .cc-banner__actions{flex-direction:column;margin-top:1rem}.cc-banner--floating .cc-banner__actions .cc-btn{font-size:.8125rem;padding:.625rem 1rem;width:100%}@media (prefers-color-scheme:dark){.cc-banner[data-theme=auto]{--cc-bg:#1a1a1a;--cc-text:#fff;--cc-text-secondary:#a0a0a0;--cc-border:#333}.cc-banner[data-theme=auto].cc-backdrop-blur{background:rgba(26,26,26,.95)}.cc-banner[data-theme=auto] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-banner[data-theme=auto] .cc-btn--secondary:hover:not(:disabled){background:#333}.cc-banner[data-theme=auto] .cc-btn--tertiary{border-color:#555;color:#a0a0a0}}.cc-banner[data-theme=dark]{--cc-bg:#1a1a1a;--cc-text:#fff;--cc-text-secondary:#a0a0a0;--cc-border:#333}.cc-banner[data-theme=dark].cc-backdrop-blur{background:rgba(26,26,26,.95)}.cc-banner[data-theme=dark] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-banner[data-theme=dark] .cc-btn--secondary:hover:not(:disabled){background:#333}.cc-banner[data-theme=dark] .cc-btn--tertiary{border-color:#555;color:#a0a0a0}@keyframes cc-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes cc-slideUp{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes cc-slideDown{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}@keyframes cc-scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes cc-backdropFadeIn{0%{opacity:0}to{opacity:1}}.cc-animate-fadeIn{animation:cc-fadeIn .3s ease-out}.cc-animate-slideUp{animation:cc-slideUp .4s cubic-bezier(.4,0,.2,1)}.cc-animate-slideDown{animation:cc-slideDown .4s cubic-bezier(.4,0,.2,1)}.cc-animate-scaleIn{animation:cc-scaleIn .3s cubic-bezier(.4,0,.2,1)}@media (prefers-reduced-motion:reduce){.cc-banner{transition:none}.cc-animate-fadeIn,.cc-animate-scaleIn,.cc-animate-slideDown,.cc-animate-slideUp{animation:none}.cc-btn{transition:none}}.cc-modal{align-items:center;bottom:0;display:flex;justify-content:center;left:0;opacity:0;padding:1rem;pointer-events:none;position:fixed;right:0;top:0;transition:opacity var(--cc-transition);z-index:10000}.cc-modal.is-visible{opacity:1;pointer-events:all}.cc-modal__overlay{background:var(--cc-overlay);bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.cc-modal__content{background:var(--cc-bg);border-radius:var(--cc-border-radius);box-shadow:0 16px 48px rgba(0,0,0,.18),0 4px 12px rgba(0,0,0,.08);display:flex;flex-direction:column;max-height:90vh;max-width:480px;overflow:hidden;position:relative;transform:scale(.9);transition:transform var(--cc-transition);width:100%}.cc-modal.is-visible .cc-modal__content{transform:scale(1)}.cc-modal__header{align-items:center;background:linear-gradient(135deg,var(--cc-primary) 0,var(--cc-primary-hover) 100%);display:flex;flex-shrink:0;justify-content:space-between;padding:1.125rem 1.25rem}.cc-modal__header h2{color:#fff;font-size:.95rem;font-weight:600;letter-spacing:-.01em;margin:0}.cc-modal__body{flex:1;overflow-y:auto;padding:1rem 1.25rem}.cc-category{border-bottom:1px solid var(--cc-border);padding:.75rem 0}.cc-category:last-child{border-bottom:none}.cc-category__header{align-items:center;display:flex;gap:.75rem}.cc-category__info{flex:1}.cc-category__info h3{color:var(--cc-text);font-size:.8125rem;font-weight:600;letter-spacing:-.01em;margin:0 0 .125rem}.cc-category__info p{color:var(--cc-text-secondary);font-size:.75rem;line-height:1.4;margin:0}.cc-toggle{align-items:center;cursor:pointer;display:inline-flex;flex-shrink:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cc-toggle input{height:0;opacity:0;position:absolute;width:0}.cc-toggle__slider{background:#d1d5db;border-radius:10px;height:20px;position:relative;transition:background-color .2s ease;width:36px}.cc-toggle__slider:before{background:#fff;border-radius:50%;box-shadow:0 1px 3px rgba(0,0,0,.15);content:"";height:16px;left:2px;position:absolute;top:2px;transition:transform .2s ease;width:16px}.cc-toggle input:checked+.cc-toggle__slider{background:var(--cc-primary)}.cc-toggle input:checked+.cc-toggle__slider:before{transform:translateX(16px)}.cc-toggle input:focus-visible+.cc-toggle__slider{outline:2px solid var(--cc-primary);outline-offset:2px}.cc-toggle--disabled{cursor:not-allowed;opacity:.6}.cc-toggle--disabled input:checked+.cc-toggle__slider{background:#9ca3af}.cc-modal__footer{align-items:center;border-top:1px solid var(--cc-border);display:flex;flex-shrink:0;gap:var(--cc-gap);justify-content:space-between;padding:1rem 1.25rem}.cc-modal__footer-links{align-items:center;display:flex;gap:.5rem}.cc-modal__footer-actions{display:flex;gap:var(--cc-gap)}.cc-privacy-link{align-items:center;color:var(--cc-text-secondary);display:inline-flex;font-size:.875rem;gap:.25rem;text-decoration:none;transition:color .2s ease}.cc-privacy-link:hover{color:var(--cc-primary);text-decoration:underline}@media (prefers-color-scheme:dark){.cc-modal[data-theme=auto] .cc-modal__content{background:#1a1a1a}.cc-modal[data-theme=auto] .cc-category__info h3{color:#fff}.cc-modal[data-theme=auto] .cc-category__info p{color:#a0a0a0}.cc-modal[data-theme=auto] .cc-category,.cc-modal[data-theme=auto] .cc-modal__footer{border-color:#333}.cc-modal[data-theme=auto] .cc-toggle__slider{background:#444}.cc-modal[data-theme=auto] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-modal[data-theme=auto] .cc-btn--secondary:hover:not(:disabled){background:#333}}.cc-modal[data-theme=dark] .cc-modal__content{background:#1a1a1a}.cc-modal[data-theme=dark] .cc-category__info h3{color:#fff}.cc-modal[data-theme=dark] .cc-category__info p{color:#a0a0a0}.cc-modal[data-theme=dark] .cc-category,.cc-modal[data-theme=dark] .cc-modal__footer{border-color:#333}.cc-modal[data-theme=dark] .cc-toggle__slider{background:#444}.cc-modal[data-theme=dark] .cc-btn--secondary{background:#2a2a2a;color:#fff}.cc-modal[data-theme=dark] .cc-btn--secondary:hover:not(:disabled){background:#333}.cc-modal--bottom-right{align-items:flex-end;justify-content:flex-end;padding:1.5rem}.cc-modal--bottom-right .cc-modal__content{max-width:450px;transform:translateX(100%)}.cc-modal--bottom-right.is-visible .cc-modal__content{transform:translateX(0)}.cc-modal--bottom-left{align-items:flex-end;justify-content:flex-start;padding:1.5rem}.cc-modal--bottom-left .cc-modal__content{max-width:450px;transform:translateX(-100%)}.cc-modal--bottom-left.is-visible .cc-modal__content{transform:translateX(0)}.cc-modal--top-right{align-items:flex-start;justify-content:flex-end;padding:1.5rem}.cc-modal--top-right .cc-modal__content{max-width:450px;transform:translateX(100%)}.cc-modal--top-right.is-visible .cc-modal__content{transform:translateX(0)}.cc-modal--top-left{align-items:flex-start;justify-content:flex-start;padding:1.5rem}.cc-modal--top-left .cc-modal__content{max-width:450px;transform:translateX(-100%)}.cc-modal--top-left.is-visible .cc-modal__content{transform:translateX(0)}@media (max-width:640px){.cc-modal{align-items:flex-end;padding:0}.cc-modal__content{border-radius:16px 16px 0 0;max-height:85vh;max-width:100%;transform:translateY(100%);width:100%}.cc-modal.is-visible .cc-modal__content{transform:translateY(0)}.cc-modal__body{padding:1rem 1.25rem}.cc-modal__footer{align-items:stretch;flex-direction:column;padding:1rem 1.25rem 1.5rem}.cc-modal__footer-links{justify-content:center;margin-top:.75rem;order:2}.cc-modal__footer-actions{flex-direction:column;order:1;width:100%}.cc-modal__footer .cc-btn{width:100%}}.cc-widget{align-items:center;background:#fff;border:1.5px solid var(--cc-primary);border-radius:50px;box-shadow:0 2px 8px rgba(0,0,0,.08);color:var(--cc-primary);cursor:pointer;display:flex;font-family:var(--cc-font-family);gap:.5rem;min-height:40px;opacity:0;padding:.625rem .875rem;position:fixed;transform:scale(0);transition:all .3s cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:9998}.cc-widget.is-visible{opacity:1;transform:scale(1)}.cc-widget:hover{background:var(--cc-primary);box-shadow:0 4px 16px rgba(0,0,0,.12);color:#fff;transform:scale(1.05)}.cc-widget:active{transform:scale(.98)}.cc-widget:focus-visible{outline:3px solid var(--cc-primary);outline-offset:2px}.cc-widget__icon{flex-shrink:0;height:20px;width:20px}.cc-widget__text{color:inherit;font-size:.8125rem;font-weight:500;white-space:nowrap}.cc-widget--bottom-right{bottom:1.5rem;right:1.5rem}.cc-widget--bottom-left{bottom:1.5rem;left:1.5rem}.cc-widget--top-right{right:1.5rem;top:1.5rem}.cc-widget--top-left{left:1.5rem;top:1.5rem}.cc-widget--compact{border-radius:50%;height:42px;justify-content:center;padding:.625rem;width:42px}.cc-widget--compact .cc-widget__text{display:none}@media (max-width:640px){.cc-widget--full .cc-widget__text{display:none}.cc-widget--full{border-radius:50%;height:44px;justify-content:center;padding:.625rem;width:44px}}@keyframes cc-widget-bounce{0%{transform:scale(0)}50%{transform:scale(1.1)}to{transform:scale(1)}}.cc-widget.is-visible{animation:cc-widget-bounce .4s cubic-bezier(.4,0,.2,1)}.cc-widget[data-theme=dark]{background:#1a1a1a;border-color:var(--cc-primary);color:var(--cc-primary)}.cc-widget[data-theme=dark]:hover{background:var(--cc-primary);color:#fff}@media (prefers-color-scheme:dark){.cc-widget[data-theme=auto]{background:#1a1a1a;border-color:var(--cc-primary);color:var(--cc-primary)}.cc-widget[data-theme=auto]:hover{background:var(--cc-primary);color:#fff}}@media (prefers-reduced-motion:reduce){.cc-widget{transition:none}.cc-widget.is-visible{animation:none}.cc-widget:hover{transform:none}}
@@ -683,6 +683,13 @@ class Banner {
683
683
  const isModal = this.config.disablePageInteraction;
684
684
  const safeColor = this.config.primaryColor ? sanitizeColor(this.config.primaryColor) : '';
685
685
  const colorStyle = buildColorStyle(safeColor);
686
+ const titleHtml = translations.title
687
+ ? `<h2 class="cc-banner__title">${escapeHtml(translations.title)}</h2>`
688
+ : '';
689
+ const descriptionHtml = this.getDescriptionHTML();
690
+ const descBlock = descriptionHtml
691
+ ? `<p class="cc-banner__description">${descriptionHtml}</p>`
692
+ : '';
686
693
  const template = `
687
694
  <div
688
695
  class="cc-banner cc-banner--${escapeHtml(position)} cc-banner--${escapeHtml(layout)} ${backdropBlur ? 'cc-backdrop-blur' : ''}"
@@ -695,28 +702,10 @@ class Banner {
695
702
  >
696
703
  <div class="cc-banner__container">
697
704
  <div class="cc-banner__content">
698
- <h2 class="cc-banner__title">
699
- ${escapeHtml(translations.title || 'We use cookies')}
700
- </h2>
701
- <p class="cc-banner__description">
702
- ${this.getDescriptionHTML()}
703
- </p>
705
+ ${titleHtml}
706
+ ${descBlock}
704
707
  </div>
705
708
  <div class="cc-banner__actions">
706
- <button
707
- class="cc-btn cc-btn--ghost"
708
- data-action="reject"
709
- aria-label="${escapeHtml(translations.rejectAll || 'Essentials only')}"
710
- >
711
- ${escapeHtml(translations.rejectAll || 'Essentials only')}
712
- </button>
713
- <button
714
- class="cc-btn cc-btn--tertiary"
715
- data-action="customize"
716
- aria-label="${escapeHtml(translations.customize || 'Customize')}"
717
- >
718
- ${escapeHtml(translations.customize || 'Customize')}
719
- </button>
720
709
  <button
721
710
  class="cc-btn cc-btn--accept"
722
711
  data-action="accept"
@@ -820,16 +809,21 @@ class Banner {
820
809
  */
821
810
  getDescriptionHTML() {
822
811
  const translations = this.config.translations || {};
823
- const defaultDescription = 'We use cookies to improve your experience on our site. You can choose which cookies you accept.';
824
- const description = escapeHtml(translations.description || defaultDescription);
812
+ if (!translations.description)
813
+ return '';
814
+ const description = escapeHtml(translations.description);
815
+ const customizeLabel = escapeHtml(translations.customize || 'Customize');
816
+ let html = description;
825
817
  if (translations.privacyPolicyUrl) {
826
818
  const safeUrl = sanitizeUrl(translations.privacyPolicyUrl);
827
819
  if (safeUrl) {
828
820
  const linkLabel = escapeHtml(translations.privacyPolicyLabel || 'Privacy Policy');
829
- return `${description} <a href="${safeUrl}" target="_blank" rel="noopener noreferrer">${linkLabel}</a>`;
821
+ html += ` <a href="${safeUrl}" target="_blank" rel="noopener noreferrer">${linkLabel}</a>`;
830
822
  }
831
823
  }
832
- return description;
824
+ // Inline customize link at end of description
825
+ html += ` <span class="cc-banner__customize" data-action="customize">${customizeLabel}</span>`;
826
+ return html;
833
827
  }
834
828
  }
835
829
 
@@ -1391,6 +1385,111 @@ function clearDeniedCookies(categories) {
1391
1385
  }
1392
1386
  }
1393
1387
 
1388
+ /**
1389
+ * Built-in translations for supported languages
1390
+ * Users can override any string via config.translations
1391
+ */
1392
+ const en = {
1393
+ title: 'We use cookies',
1394
+ description: 'We use cookies to improve your experience on our site. You can choose which cookies you accept.',
1395
+ acceptAll: 'Accept all',
1396
+ rejectAll: 'Essentials only',
1397
+ customize: 'Manage preferences',
1398
+ savePreferences: 'Save preferences',
1399
+ essentialsOnly: 'Essentials only',
1400
+ preferencesTitle: 'Cookie Preferences',
1401
+ cookieSettings: 'Cookie settings',
1402
+ cookies: 'Cookies',
1403
+ privacyPolicyLabel: 'Privacy Policy',
1404
+ };
1405
+ const fr = {
1406
+ title: 'Nous utilisons des cookies',
1407
+ description: 'Ce site utilise des cookies pour améliorer votre expérience de navigation. Vous pouvez choisir les cookies que vous acceptez.',
1408
+ acceptAll: 'Tout accepter',
1409
+ rejectAll: 'Essentiels uniquement',
1410
+ customize: 'Gérer mes préférences',
1411
+ savePreferences: 'Enregistrer',
1412
+ essentialsOnly: 'Essentiels uniquement',
1413
+ preferencesTitle: 'Préférences des cookies',
1414
+ cookieSettings: 'Paramètres des cookies',
1415
+ cookies: 'Cookies',
1416
+ privacyPolicyLabel: 'Politique de confidentialité',
1417
+ };
1418
+ const de = {
1419
+ title: 'Wir verwenden Cookies',
1420
+ description: 'Diese Website verwendet Cookies, um Ihr Erlebnis zu verbessern. Sie können wählen, welche Cookies Sie akzeptieren.',
1421
+ acceptAll: 'Alle akzeptieren',
1422
+ rejectAll: 'Nur essenzielle',
1423
+ customize: 'Einstellungen verwalten',
1424
+ savePreferences: 'Speichern',
1425
+ essentialsOnly: 'Nur essenzielle',
1426
+ preferencesTitle: 'Cookie-Einstellungen',
1427
+ cookieSettings: 'Cookie-Einstellungen',
1428
+ cookies: 'Cookies',
1429
+ privacyPolicyLabel: 'Datenschutzrichtlinie',
1430
+ };
1431
+ const es = {
1432
+ title: 'Usamos cookies',
1433
+ description: 'Este sitio utiliza cookies para mejorar su experiencia. Puede elegir qué cookies acepta.',
1434
+ acceptAll: 'Aceptar todo',
1435
+ rejectAll: 'Solo esenciales',
1436
+ customize: 'Gestionar preferencias',
1437
+ savePreferences: 'Guardar',
1438
+ essentialsOnly: 'Solo esenciales',
1439
+ preferencesTitle: 'Preferencias de cookies',
1440
+ cookieSettings: 'Configuración de cookies',
1441
+ cookies: 'Cookies',
1442
+ privacyPolicyLabel: 'Política de privacidad',
1443
+ };
1444
+ const it = {
1445
+ title: 'Utilizziamo i cookie',
1446
+ description: 'Questo sito utilizza i cookie per migliorare la tua esperienza. Puoi scegliere quali cookie accettare.',
1447
+ acceptAll: 'Accetta tutti',
1448
+ rejectAll: 'Solo essenziali',
1449
+ customize: 'Gestisci preferenze',
1450
+ savePreferences: 'Salva',
1451
+ essentialsOnly: 'Solo essenziali',
1452
+ preferencesTitle: 'Preferenze cookie',
1453
+ cookieSettings: 'Impostazioni cookie',
1454
+ cookies: 'Cookie',
1455
+ privacyPolicyLabel: 'Informativa sulla privacy',
1456
+ };
1457
+ const nl = {
1458
+ title: 'Wij gebruiken cookies',
1459
+ description: 'Deze site maakt gebruik van cookies om uw ervaring te verbeteren. U kunt kiezen welke cookies u accepteert.',
1460
+ acceptAll: 'Alles accepteren',
1461
+ rejectAll: 'Alleen essentieel',
1462
+ customize: 'Voorkeuren beheren',
1463
+ savePreferences: 'Opslaan',
1464
+ essentialsOnly: 'Alleen essentieel',
1465
+ preferencesTitle: 'Cookie-voorkeuren',
1466
+ cookieSettings: 'Cookie-instellingen',
1467
+ cookies: 'Cookies',
1468
+ privacyPolicyLabel: 'Privacybeleid',
1469
+ };
1470
+ const pt = {
1471
+ title: 'Utilizamos cookies',
1472
+ description: 'Este site utiliza cookies para melhorar a sua experiência. Pode escolher quais cookies aceita.',
1473
+ acceptAll: 'Aceitar todos',
1474
+ rejectAll: 'Apenas essenciais',
1475
+ customize: 'Gerir preferências',
1476
+ savePreferences: 'Guardar',
1477
+ essentialsOnly: 'Apenas essenciais',
1478
+ preferencesTitle: 'Preferências de cookies',
1479
+ cookieSettings: 'Definições de cookies',
1480
+ cookies: 'Cookies',
1481
+ privacyPolicyLabel: 'Política de privacidade',
1482
+ };
1483
+ const builtInTranslations = {
1484
+ en,
1485
+ fr,
1486
+ de,
1487
+ es,
1488
+ it,
1489
+ nl,
1490
+ pt,
1491
+ };
1492
+
1394
1493
  /**
1395
1494
  * CookieConsent - Main orchestrator class
1396
1495
  */
@@ -1620,7 +1719,12 @@ class CookieConsent {
1620
1719
  * Validate and set default config values
1621
1720
  */
1622
1721
  validateConfig(config) {
1623
- return Object.assign(Object.assign({}, config), { categories: config.categories || {
1722
+ var _a;
1723
+ // Merge built-in language translations with user overrides
1724
+ const langKey = ((_a = config.language) === null || _a === void 0 ? void 0 : _a.toLowerCase().split('-')[0]) || 'en';
1725
+ const langDefaults = builtInTranslations[langKey] || builtInTranslations['en'];
1726
+ const mergedTranslations = Object.assign(Object.assign({}, langDefaults), config.translations);
1727
+ return Object.assign(Object.assign({}, config), { translations: mergedTranslations, categories: config.categories || {
1624
1728
  necessary: {
1625
1729
  enabled: true,
1626
1730
  readOnly: true,