(function(){try{var q=window.location.search;var m=q.match(/[?&]akp_notrack=([01])/);if(m){document.cookie='akp_notrack='+m[1]+';path=/;max-age='+(m[1]==='1'?15552000:0)+';SameSite=Lax';}var armed=/(^|; )akp_notrack=1(;|$)/.test(document.cookie)||(m&&m[1]==='1');if(armed&&!window.fbq){var n=function(){};n.queue=[];n.loaded=true;n.version='2.0';n.callMethod=function(){};window.fbq=n;window._fbq=n;}}catch(e){}})();
var breeze_prefetch = {"local_url":"https://annakatherinepage.com","ignore_remote_prefetch":"1","ignore_list":["/?wc-api=wc_facebook_get_feed_data&secret=1760aef9e5a5d06e2a1f0f642c457ce5","/cart/","/checkout/","/my-account/","wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
https://annakatherinepage.com/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js
https://annakatherinepage.com/wp-includes/js/jquery/jquery.min.js
https://annakatherinepage.com/wp-includes/js/jquery/jquery-migrate.min.js
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js
var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"View cart","cart_url":"https://annakatherinepage.com/checkout/","is_cart":"","cart_redirect_after_add":"no"};
//# sourceURL=wc-add-to-cart-js-extra
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js
var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Show password","i18n_password_hide":"Hide password"};
//# sourceURL=woocommerce-js-extra
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js
window.__wc_fb_page_generated = 1794699505;
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
window.FacebookSignals = window.FacebookSignals || {
_held: false,
_releasing: false,
_pixelInitialized: false,
_pixelId: null,
_pixelUserInfo: {},
_pixelOptions: {},
_pendingPixelEvents: [],
_queue: [],
_config: {},
_attribution: {},
_seenEventIds: {},
_fbclid: (function() {
try {
var m = window.location.search.match(/[?&]fbclid=([^&]*)/);
return m ? decodeURIComponent(m[1]) : null;
} catch(e) { return null; }
})(),
init: function(config) {
config = config || {};
this._config = config;
this._attribution = config.attribution || {};
var cookieState = this._getCookie('wc_facebook_signals_state');
this._held = cookieState ? cookieState === 'held' : !!config.held;
this._fbclid = this._fbclid || null;
if (typeof fbq === 'function') {
fbq('consent', this._held ? 'revoke' : 'grant');
}
try {
var raw = window.sessionStorage.getItem('wc_facebook_signals_seen_event_ids');
this._seenEventIds = raw ? JSON.parse(raw) : {};
} catch (e) {
this._seenEventIds = this._seenEventIds || {};
}
},
initPixel: function(pixelId, userInfo, options) {
this._pixelId = pixelId;
this._pixelUserInfo = userInfo && typeof userInfo === 'object' && !Array.isArray(userInfo) ? userInfo : {};
this._pixelOptions = options || {};
if (!this._held) {
this._runPixelInit();
}
},
_runPixelInit: function() {
if (this._pixelInitialized || !this._pixelId || typeof fbq !== 'function') return;
fbq('init', this._pixelId, this._pixelUserInfo, this._pixelOptions);
this._pixelInitialized = true;
this._flushPendingPixelEvents();
},
_flushPendingPixelEvents: function() {
var pending = this._pendingPixelEvents;
this._pendingPixelEvents = [];
for (var i = 0; i < pending.length; i++) {
var ev = pending[i];
this._firePixelEvent(ev.name, ev.params, ev.method, ev.eventId);
}
},
_fireOrQueuePixelEvent: function(name, params, method, eventId) {
if (!this._pixelInitialized) {
this._pendingPixelEvents.push({
name: name, params: params || {}, method: method || 'track', eventId: eventId || null
});
return;
}
this._firePixelEvent(name, params || {}, method || 'track', eventId || null);
},
_firePixelEvent: function(name, params, method, eventId) {
method = method || 'track';
if (eventId) {
fbq(method, name, params || {}, { eventID: eventId });
} else {
fbq(method, name, params || {});
}
},
queueEvent: function(eventData) {
if (!eventData || !eventData.event_name) return;
var originalId = eventData.event_id || null;
if (originalId && this._seenEventIds[originalId]) return;
if (!this._held) {
this._fireOrQueuePixelEvent(eventData.event_name, eventData.custom_data || {}, eventData.method || 'track', originalId);
return;
}
eventData = this._cloneEventData(eventData);
eventData.event_id = this._generateEventId();
eventData.event_time = eventData.event_time || Math.floor(Date.now() / 1000);
this._queue.push(eventData);
var idToMark = originalId || eventData.event_id;
if (idToMark) {
this._seenEventIds[idToMark] = 1;
try {
window.sessionStorage.setItem(
'wc_facebook_signals_seen_event_ids',
JSON.stringify(this._seenEventIds)
);
} catch (e) {}
}
},
trackEvent: function(name, params, userData, method, eventId) {
method = method || 'track';
eventId = eventId || (params && params.eventID) || null;
if (this._held) {
this.queueEvent({
event_name: name,
custom_data: params || {},
event_id: eventId,
event_time: Math.floor(Date.now() / 1000),
method: method
});
} else {
this._fireOrQueuePixelEvent(name, params || {}, method, eventId);
}
},
release: function() {
var self = this;
if (!self._held || self._releasing || !self._config.ajaxUrl) {
return Promise.resolve({ success: true, data: { sent_count: 0 } });
}
self._releasing = true;
var attribution = self._collectAttribution();
var payload = JSON.stringify({
events: self._queue,
attribution: {
fbp: attribution.fbp || null,
fbc: attribution.fbc || null
},
fbclid: self._fbclid || null
});
var url = self._config.ajaxUrl +
(self._config.ajaxUrl.indexOf('?') === -1 ? '?' : '&') +
'action=' + encodeURIComponent(self._config.action);
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
try {
var resp = JSON.parse(xhr.responseText);
self._handleReleaseResponse(resp.data || {}, attribution);
resolve(resp);
} catch(e) { self._releasing = false; reject(e); }
} else {
self._releasing = false;
reject(new Error('Signal release AJAX failed: ' + xhr.status));
}
};
xhr.onerror = function() { self._releasing = false; reject(new Error('Network error')); };
xhr.send(payload);
});
},
_handleReleaseResponse: function(data, attribution) {
this._syncAttributionCookies(data || {}, attribution);
// Override cached user_info with fresh data from the release response.
if (data.user_info && typeof data.user_info === 'object' && !Array.isArray(data.user_info)) {
this._pixelUserInfo = data.user_info;
}
this._held = false;
this._releasing = false;
fbq('consent', 'grant');
this._runPixelInit();
var queue = this._queue;
for (var i = 0; i < queue.length; i++) {
var ev = queue[i];
this._fireOrQueuePixelEvent(ev.event_name, ev.custom_data || {}, ev.method || 'track', ev.event_id || null);
}
this._queue = [];
},
_collectAttribution: function() {
var clientParams = {};
if (typeof clientParamBuilder !== 'undefined') {
try {
clientParams = clientParamBuilder.processAndCollectParams(this._getAttributionUrl()) || {};
} catch (e) {}
}
var fbp = this._getCookie('_fbp') || clientParams._fbp || (typeof clientParamBuilder !== 'undefined' ? clientParamBuilder.getFbp() : null);
var fbc = this._getCookie('_fbc') || clientParams._fbc || (typeof clientParamBuilder !== 'undefined' ? clientParamBuilder.getFbc() : null);
if (!fbc && this._fbclid) {
fbc = 'fb.1.' + Date.now() + '.' + this._fbclid;
}
return { fbp: fbp || null, fbc: fbc || null };
},
_syncAttributionCookies: function(data, attribution) {
var fbp = data.fbp || (attribution && attribution.fbp) || null;
var fbc = data.fbc || (attribution && attribution.fbc) || null;
if (fbp) {
this._setAttributionCookie('_fbp', fbp, data.fbp_domain || null);
}
if (fbc) {
this._setAttributionCookie('_fbc', fbc, data.fbc_domain || null);
}
},
_setAttributionCookie: function(name, value, domain) {
if (!value) return;
var domainAttr = domain ? ';domain=' + domain : '';
document.cookie = name + '=' + encodeURIComponent(value) + ';path=/;max-age=7776000' + domainAttr + ';SameSite=Lax';
},
_getCookie: function(name) {
var match = document.cookie.match(new RegExp('(?:^|;\\s*)' + name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + '=([^;]*)'));
if (!match) return null;
try { return decodeURIComponent(match[1]); } catch(e) { return null; }
},
_cloneEventData: function(eventData) {
var clone = {};
for (var key in eventData) {
if (Object.prototype.hasOwnProperty.call(eventData, key)) {
clone[key] = eventData[key];
}
}
return clone;
},
_generateEventId: function() {
if (window.crypto && typeof window.crypto.randomUUID === 'function') {
return window.crypto.randomUUID();
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
},
_getAttributionUrl: function() {
if (!this._fbclid) return window.location.href;
try {
var url = new URL(window.location.href);
if (!url.searchParams.get('fbclid')) {
url.searchParams.set('fbclid', this._fbclid);
}
return url.toString();
} catch (e) {
return window.location.href;
}
}
};
FacebookSignals.init({
held: false,
ajaxUrl: "https:\/\/annakatherinepage.com\/wp-admin\/admin-ajax.php",
action: 'facebook_release_signals',
pixelId: "5552345558112956",
attribution: {}
});
FacebookSignals.initPixel(
"5552345558112956",
{},
{"agent":"woocommerce_0-11.3.0-3.7.8"} );
document.addEventListener( 'DOMContentLoaded', function() {
document.body.insertAdjacentHTML( 'beforeend', '<div class=\"wc-facebook-pixel-event-placeholder\"></div>' );
}, false );
Skip to content
Tag: hostess gifts
Disclosure: This post contains affiliate links. If you buy through them, I may earn a small commission at no extra cost to you. Prices and availability were checked on Nov 13, 2026 and can change.
Updated November 2026.
The best hostess gifts for the holidays are things she will put out the same night, not another bottle of wine. Choose Estelle’s rose and lavender champagne coupes at $105 for the toast, Furbish Studio’s Silly Goose lacquer tray at $58 for a host with humor, or Coming Soon’s asparagus taper candles at $35 for a gift people remember.
Why trust this list
I’m Anna Katherine Page, a South Carolina flower farmer and curator. I grow cut flowers and run Cut & Bloom Co on Etsy, where I sell pricing tools for flower farmers. These hostess gift ideas are well-made pieces from retailer pages I checked on November 13, 2026. I did not personally test every item; I chose them for materials, usefulness, and a vintage-modern look that lasts.
Quick comparison
Pick Brand Price Best for Link Safety Matches – Nutcracker Rifle Paper Co. $12 An easy add-on next to candles Shop Regarding Cocktails Hawkins New York $30 The host with a good bar cart Shop Forge Candlestick Hawkins New York $32 A host who sets a real table Shop Asparagus Taper Candles Coming Soon $35 A host with a sense of humor Shop Beeswax Tomato Candles, Set of 8 Hawkins New York $38 A playful holiday tablescape Shop Quilted Pouch Set – Rose Study Rifle Paper Co. $48 A gift she’ll use after the party Shop Embroidered Literary Cocktail Napkins, Set of 4 Hawkins New York $58 The bookish host Shop Silly Goose Lacquer Tray Furbish Studio $58 The entryway or the bar cart Shop Ribbed Cocktail Coupe, Set of 2 – Brown Hawkins New York $76 Vintage-feeling cocktail hour Shop Estelle Colored Champagne Coupe – Set of 2 {Colorblock: Rose + Lavender} Estelle Colored Glass $105 The toast she’ll use that night Shop
Prices were checked on Nov 13, 2026. The list starts under $25 and runs up to one glassware splurge, so you can match the gift to the invitation. If you are also shopping for a new house, see my housewarming gifts for new homeowners .
Under $25
1. Safety Matches – Nutcracker ($12)
The easy add-on to leave next to the candles. Illustrated Nutcracker safety matches from Rifle Paper Co., a small gift that still feels finished.
Why it’s a good gift: It is a complete, inexpensive hostess gift on its own, and it also pairs well with candles or a bottle you are already bringing.
Best for: The easy add-on, a stocking-stuffer budget, or tucking into a larger gift.
Shop at Rifle Paper Co.
Under $50
2. Regarding Cocktails ($30)
A cocktail book for the host with a good bar cart. From Hawkins New York, for the friend who is always mixing something.
Why it’s a good gift: A cocktail book is useful long after the party, and it feels more considered than another bottle of wine.
Best for: The host who already has a bar cart and likes to mix a drink.
Shop at Hawkins New York
3. Forge Candlestick ($32)
A candlestick with an antique silhouette. Hawkins New York’s forged candlestick, the kind of piece that looks like it has been on the table for years.
Why it’s a good gift: It has an antique shape and a finished look, so it can go out on the table the same night.
Best for: A host who sets a real table and likes pieces with a little patina.
Shop at Hawkins New York
4. Asparagus Taper Candles ($35)
The funny, gorgeous one. Asparagus-shaped taper candles from Coming Soon, a little wild on a dinner table and a gift people remember.
Why it’s a good gift: Unique hostess gifts work best when they are still useful. These are real taper candles, just shaped like asparagus, so they get used and talked about.
Best for: A host with a sense of humor, or anyone who loves a slightly quirky tablescape.
Shop at Coming Soon
5. Beeswax Tomato Candles, Set of 8 ($38)
Tomato candles for the table. A set of eight beeswax tomato candles from Hawkins New York: quirky tablescape pieces that look handmade.
Why it’s a good gift: A set of eight is enough to dress a table, and beeswax candles feel more special than a standard pillar.
Best for: A playful holiday table, or a host who already collects unusual candles.
Shop at Hawkins New York
6. Quilted Pouch Set – Rose Study ($48)
A patterned pouch set she can actually use. Rifle Paper Co.’s Rose Study quilted pouches, a floral textile gift that works long after the party.
Why it’s a good gift: Unlike a one-night food gift, a pouch set stays in a bag or a drawer and gets used.
Best for: A host who would rather have something practical and pretty than another bottle.
Shop at Rifle Paper Co.
Under $100
7. Embroidered Literary Cocktail Napkins, Set of 4 ($58)
Wry, well-made cocktail napkins. An embroidered literary set of four from Hawkins New York, for the bookish host.
Why it’s a good gift: Cloth cocktail napkins are a classic hostess gift, and the literary embroidery gives this set a point of view.
Best for: The bookish host, or a friend who cares about the cocktail hour details.
Shop at Hawkins New York
8. Silly Goose Lacquer Tray ($58)
The tray with a goose, and a sense of humor. A hand-painted lacquer tray from Furbish Studio, quirky and giftable, for the entryway or the bar.
Why it’s a good gift: A tray gets used for drinks, mail, or keys, and this one has enough personality to feel like a real present.
Best for: A host who likes a little humor on the bar cart or in the entryway.
Shop at Furbish Studio
9. Ribbed Cocktail Coupe, Set of 2 – Brown ($76)
Smoky brown coupes for cocktail hour. A set of two ribbed coupes from Hawkins New York, with a vintage barware feel.
Why it’s a good gift: Colored, ribbed glass looks collected, and a set of two is the right size to bring to a holiday party.
Best for: Cocktail hour, or a host who already leans vintage barware.
Shop at Hawkins New York
The splurge
10. Estelle Colored Champagne Coupe – Set of 2 {Colorblock: Rose + Lavender} ($105)
Statement glassware for the toast. A set of two Estelle Colored Glass coupes in a rose and lavender colorblock: the hostess gift that gets used the same night.
Why it’s a good gift: Statement glassware is a hostess gift she can put out immediately, and the rose and lavender colorblock is memorable without being novelty-only.
Best for: The holiday toast, or a close friend you want to spoil.
Shop at Estelle Colored Glass
More gift guides
If this list is close but not quite right, you may also like housewarming gifts for new homeowners , gifts for flower lovers and flower farmers , and gifts for small business owners and makers .
FAQ
What’s a good hostess gift for Christmas besides wine?
Bring something she can put out the same night. Estelle’s rose and lavender champagne coupes at $105 are the toast gift, Furbish Studio’s Silly Goose lacquer tray at $58 works on a bar or in the entryway, and Coming Soon’s asparagus taper candles at $35 are the memorable, slightly quirky option.
What are the best hostess gifts under $50?
Strong options under $50 include Rifle Paper Co. Nutcracker safety matches at $12, Hawkins New York’s Regarding Cocktails book at $30, the Forge Candlestick at $32, Coming Soon asparagus taper candles at $35, beeswax tomato candles at $38, and the Rose Study quilted pouch set at $48.
Should I bring a hostess gift to a holiday party?
Yes, if you can. A small, finished gift is enough. Matches, candles, napkins, or a tray are easier for the host than something that needs to be cooked, assembled, or refrigerated mid-party.
What’s a unique hostess gift that still feels useful?
Look for a useful object with a little humor or character, not a novelty that will be put away. The asparagus taper candles, beeswax tomato candles, and Silly Goose lacquer tray all sit in that middle ground.
Are candles still a good hostess gift?
Yes, especially if they have a point of view. A standard scented jar can feel generic. Shaped beeswax or taper candles, or a candlestick she can reuse, feel more considered and can go straight on the table.
How much should I spend on a hostess gift?
There is no fixed rule. This list starts at $12 and goes up to $105, so you can match the gift to how close you are and to the invitation. Under $50 is plenty for most holiday parties.
Prices checked Nov 13, 2026. This post contains affiliate links; I may earn a small commission at no extra cost to you.
Your cart
(items: 0)
Products in cart
Available on backorder
Previous price:
Discounted price:
(function () {
var c = document.body.className;
c = c.replace(/woocommerce-no-js/, 'woocommerce-js');
document.body.className = c;
})();
https://annakatherinepage.com/wp-includes/js/dist/hooks.min.js
https://annakatherinepage.com/wp-includes/js/dist/i18n.min.js
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
https://annakatherinepage.com/wp-includes/js/dist/private-apis.min.js
https://annakatherinepage.com/wp-includes/js/dist/url.min.js
https://annakatherinepage.com/wp-includes/js/dist/api-fetch.min.js
wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "https://annakatherinepage.com/wp-json/" ) );
wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "e12cbd481e" );
wp.apiFetch.use( wp.apiFetch.nonceMiddleware );
wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware );
wp.apiFetch.nonceEndpoint = "https://annakatherinepage.com/wp-admin/admin-ajax.php?action=rest-nonce";
//# sourceURL=wp-api-fetch-js-after
https://annakatherinepage.com/wp-content/uploads/burst/js/burst.min.js
var wc_facebook_signals_params = {"ajax_url":"https://annakatherinepage.com/wp-admin/admin-ajax.php","nonce":"ff287df3b2","action":"wc_facebook_update_signals_state"};
//# sourceURL=wc-facebook-signals-js-extra
https://annakatherinepage.com/wp-content/plugins/facebook-for-woocommerce/assets/js/facebook-for-woocommerce-signals.js
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js
var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://annakatherinepage.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}};
//# sourceURL=wc-order-attribution-js-extra
https://annakatherinepage.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js
https://annakatherinepage.com/wp-content/plugins/facebook-for-woocommerce/assets/js/frontend/pixel-events.js
(function() {
var processParams = function() {
if (typeof clientParamBuilder !== "undefined" && !/(?:^|;\s*)wc_facebook_signals_state=held(?:;|$)/.test(document.cookie)) {
clientParamBuilder.processAndCollectAllParams(window.location.href);
}
};
if (typeof clientParamBuilder !== "undefined") {
processParams();
return;
}
var fallbackScript = document.createElement("script");
fallbackScript.src = "https:\/\/unpkg.com\/meta-capi-param-builder-clientjs@1.3.2\/dist\/clientParamBuilder.bundle.js";
fallbackScript.onload = processParams;
document.head.appendChild(fallbackScript);
}());
//# sourceURL=facebook-capi-param-builder-js-after
/* WooCommerce Facebook Integration Event Tracking */
fbq('set', 'agent', (function(){var a='woocommerce_0-11.3.0-3.7.8';if(window.__wc_fb_page_generated&&(Math.floor(Date.now()/1000)-window.__wc_fb_page_generated)>1800){a=a.replace(/(\d+\.\d+\.\d+)/,'$1_c');}return a;})(), '5552345558112956');
window.wcFacebookPixelFiredEvents = window.wcFacebookPixelFiredEvents || {};
if (!window.wcFacebookPixelFiredEvents["aba01962-84d7-4b39-b388-a392bf12c438"]) {
window.wcFacebookPixelFiredEvents["aba01962-84d7-4b39-b388-a392bf12c438"] = true;
var isStale = window.__wc_fb_page_generated && (Math.floor(Date.now()/1000) - window.__wc_fb_page_generated) > 1800;
if (window.FacebookSignals && typeof window.FacebookSignals.trackEvent === 'function') {
window.FacebookSignals.trackEvent('PageView', {
"source": "woocommerce_0",
"version": "11.3.0",
"pluginVersion": "3.7.8"
}, null, 'track', isStale ? null : "aba01962-84d7-4b39-b388-a392bf12c438");
} else if (isStale) {
fbq('track', 'PageView', {
"source": "woocommerce_0",
"version": "11.3.0",
"pluginVersion": "3.7.8"
});
} else {
fbq('track', 'PageView', {
"source": "woocommerce_0",
"version": "11.3.0",
"pluginVersion": "3.7.8"
}, {
"eventID": "aba01962-84d7-4b39-b388-a392bf12c438"
});
}
}
//# sourceURL=facebook-for-woocommerce-inline-js-after
(function(){
function rgb(c){var m=(c||"").match(/[0-9.]+/g);return m?m.map(Number):null;}
function lum(a){return (0.299*a[0]+0.587*a[1]+0.114*a[2])/255;}
function effbg(el){var n=el;while(n){var c=rgb(getComputedStyle(n).backgroundColor);if(c&&(c.length<4||c[3]>0.5))return c;n=n.parentElement;}return null;}
var sel="main h1,main h2,main h3,main h4,main p,main li,main span,#frc h1,#frc h2,#frc h3,#frc p,#frc span,#frc li";
document.querySelectorAll(sel).forEach(function(t){
var bg=effbg(t);
if(!bg) return;
if(lum(bg)<0.30){
var fc=rgb(getComputedStyle(t).color);
if(fc && lum(fc)<0.5){ t.style.setProperty("color","#f7f1e6","important"); }
}
});
})();