Give Now
Make a Lasting Impact
Your support of CTSFW makes a difference in the lives of our students today and in the lives of your family and friends for generations to come. CTSFW has assembled some of the finest faculty in the world to form servants committed to the Holy Scriptures, the Lutheran Confessions, and the liturgical life of the Church, ensuring that your congregation will have faithful pastors who will teach the faithful, reach the lost, and care for all.
Why Support CTSFW?
Give Now
/* Overrides an inline radius the embed script writes; see print_assets(). */
.ctsfw-giving iframe { border-radius: 0 !important; }
.giving-form-center { display: flex; justify-content: center; }
.giving-form-center > * {
width: 100%;
max-width: 1024px;
margin-inline: auto;
}
/* The recurring-donation nudge tray is the one piece of the embed still
rendered as a custom element with a shadow root, so it is the one piece page
script can still style. 1.0.x patched it from a MutationObserver on
document.documentElement with subtree:true — but subtree does NOT pierce
shadow DOM, so if the shadow root attached after the last light-DOM mutation
the patch never fired. Measured: on one live page the tray kept its 8px
radius and no injected style was present, while the identical injection run
by hand a moment later worked. A race, not a selector fault.
This version polls for the shadow root instead of waiting for a mutation
that may never come, bounded so it cannot run forever, and re-arms from the
observer when a new tray is added to the light DOM (that insertion IS
observable). Injection is idempotent. */
(function () {
var SEL = 'cl-nudge-tray';
var CSS = '.nudge-tray,.nudge-tray .nudge-tray--cta,.nudge-tray--close{border-radius:0 !important}';
var WINDOW_MS = 30000;
var STEP_MS = 250;
var timer = null;
var deadline = 0;
function inject( el ) {
var root = el.shadowRoot;
if ( ! root ) { return false; }
if ( root.querySelector( 'style[data-ctsfw-nudge]' ) ) { return true; }
var style = document.createElement( 'style' );
style.setAttribute( 'data-ctsfw-nudge', '1' );
style.textContent = CSS;
root.appendChild( style );
return true;
}
function sweep() {
var nodes = document.querySelectorAll( SEL );
var pending = 0;
for ( var i = 0; i deadline ) && timer ) {
clearInterval( timer );
timer = null;
}
}
function arm() {
deadline = Date.now() + WINDOW_MS;
if ( ! timer ) { timer = setInterval( sweep, STEP_MS ); }
sweep();
}
function watch( records ) {
for ( var i = 0; i < records.length; i++ ) {
var added = records[ i ].addedNodes;
for ( var j = 0; j < added.length; j++ ) {
var node = added[ j ];
if ( ! node || node.nodeType !== 1 ) { continue; }
if ( ( node.matches && node.matches( SEL ) ) ||
( node.querySelector && node.querySelector( SEL ) ) ) {
arm();
return;
}
}
}
}
arm();
if ( window.MutationObserver ) {
new MutationObserver( watch ).observe(
document.documentElement,
{ childList: true, subtree: true }
);
}
})();